2016-09-16 1 views
2

У меня есть dataframe с датой, id - мне нужно вытащить каждую комбинацию даты и идентификатора и создать новый dataframe.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) для относительных значений индекса только (первая дата, первый идентификатор & вторую дату, второй Id), но мне нужно выход для всех пар. Пожалуйста, дайте мне знать, что менять в цикле?

ответ

-2

, чтобы получить все пары ids vs. dates, вы могли бы использовать в качестве itertools

import itertools 

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

itertools является прекрасным ответом, но этот фрагмент даже не работает. Вы просто переназначаете фрагмент 'df' в ту же переменную' df2' снова и снова. – piRSquared

+0

@piRSquared из того, что я понял, OP хотел создать такой срез для каждой пары id/date-slice, который предположительно подвергается дальнейшей обработке ... – ewcz

0

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

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

enter image description here


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

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

 Смежные вопросы

  • Нет связанных вопросов^_^