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')]