Python для цикла над двумя списками для всех пар

У меня есть датафрейм с датой, идентификатором - мне нужно вытащить каждую комбинацию даты и идентификатора и создать новый фрейм данных.

  date           id
2016-05-13       abc
2016-05-13       pqr
2016-05-14       abc
2016-05-14       pqr

ids = list(sorted(set(df['id'])))
Out: ['abc','pqr']

dates = list(sorted(set(df[df.id == ids[i]]['date'])))
Out: ['2016-05-13','2016-05-14']

for i in range(0,len(ids)):
    df2 = df[(df.date == dates[i]) & (df.id == id[i])]

Приведенный выше код приводит к выводу (df2) только для относительных значений индекса (Первая дата, Первый идентификатор и Вторая дата, Второй идентификатор), но мне нужны выходные данные для всех пар. Пожалуйста, дайте мне знать, что изменить в цикле?

2 ответа

Решение

to get all the pairs ids против datesВы могли бы использовать itertools как

import itertools

for iid, ddate in itertools.product(ids, dates):
    df2 = df[(df.date == ddate) & (df.id == iid)]

Создайте новый фрейм данных с каждым id в столбцах и каждый date в строках. Вы можете заполнить его позже.

pd.DataFrame([], set(df.date), set(df.id))


если вы просто хотите список комбинаций

pd.MultiIndex.from_product([set(df.id), set(df.date)]).tolist()

[('pqr', '2016-05-14'),
 ('pqr', '2016-05-13'),
 ('abc', '2016-05-14'),
 ('abc', '2016-05-13')]
Другие вопросы по тегам