Я изменил исходный DataFrame следующим образом:
itemId sellerId effectiveDate
19752572585893 31280 2005-12-31
19752572585893 31280 2006-02-28
19752592585894 31280 2008-01-31
19752592585894 5407 2007-07-31
19752592585894 5407 2008-03-31
19752592585894 5407 2008-01-31
Оттуда я отфильтровал его, чтобы иметь только самый последний год для каждого itemId
:
df['effectiveDate'] = pd.to_datetime(df['effectiveDate'])
filtered = df[df.groupby(by=['itemId']).apply(lambda g:
g['effectiveDate'] >=
g['effectiveDate'].max() -
pd.Timedelta(days=365)).values]
Затем я sellerId
s объединены следующим образом:
filtered.groupby(by=['itemId'])['sellerId'].agg(lambda x: x.unique().tolist())
Осталось получить максимальные даты и объединить их с отфильтрованными и объединенными данными:
max_dates = filtered.groupby(by=['itemId'])['effectiveDate'].max()
modified_df = pd.concat([compressed,max_dates],axis=1)
Результат:
sellerId effectiveDate
itemId
19752572585893 [31280] 2006-02-28
19752592585894 [31280, 5407] 2008-03-31