Расширение моего предыдущего вопроса .У меня есть исходный фрейм данных, который имеет три столбца: Customer, Date и Item.Я хочу добавить новый столбец, содержащий историю элементов, представляющий собой массив всех элементов для этого клиента, которые находятся в более ранних (определяемых датой) строках. Если клиент совершил несколько покупок в одну и ту же дату, ни один элемент строки не должен быть указан в истории элементов для другого.
Итак, учитывая данные этого примера:
df = pd.DataFrame({'Customer':['Bert', 'Bert', 'Bert', 'Bert', 'Bert', 'Ernie', 'Ernie', 'Ernie', 'Ernie', 'Steven', 'Steven'], 'Date':['01/01/2019', '15/01/2019', '20/01/2019', '20/01/2019', '22/01/2019', '01/01/2019', '15/01/2019', '20/01/2019', '22/01/2019', '01/01/2019' ,'15/01/2019'], 'Item':['Bread', 'Cheese', 'Apples', 'Pears', 'Toothbrush', 'Toys', 'Shellfish', 'Dog', 'Yoghurt', 'Toilet', 'Dominos']})
Customer Date Item
Bert 01/01/2019 Bread
Bert 15/01/2019 Cheese
Bert 20/01/2019 Apples
Bert 20/01/2019 Pears
Bert 22/01/2019 Toothbrush
Ernie 01/01/2019 Toys
Ernie 15/01/2019 Shellfish
Ernie 20/01/2019 Dog
Ernie 22/01/2019 Yoghurt
Steven 01/01/2019 Toilet
Steven 15/01/2019 Dominos
Вывод, который я хотел бы видеть, будет таким:
Customer Date Item Item History
Bert 01/01/2019 Bread NaN
Bert 15/01/2019 Cheese [Bread]
Bert 20/01/2019 Apples [Bread, Cheese]
Bert 20/01/2019 Pears [Bread, Cheese]
Bert 22/01/2019 Toothbrush [Bread, Cheese, Apples, Pears]
Ernie 01/01/2019 Toys NaN
Ernie 15/01/2019 Shellfish [Toys]
Ernie 20/01/2019 Dog [Toys, Shellfish]
Ernie 22/01/2019 Yoghurt [Toys, Shellfish, Dog]
Steven 01/01/2019 Toilet NaN
Steven 15/01/2019 Dominos [Toilet]
Обратите внимание, что для покупок Берта 20/01/2019 ни один столбец «История» не содержит предмет другого.Для его покупки 22/01/2019 включены оба предмета от 20/01/2019.
Ответ на предыдущий вопрос - отличный бит понимания списка в форме:
df['Item History'] = [x.Item[:i].tolist() for j, x in df.groupby('Customer')
for i in range(len(x))]
df.loc[~df['Item History'].astype(bool), 'Item History']= np.nan
Но, очевидно, «i» в x.Item[:i]
должно работать в последней строкегде Дата не совпадает с текущей строкой.Любой совет по достижению этого очень ценится.