我具有以下形式的给定年份的客户购买量+产品销售量的交易数据库:
df = pd.DataFrame({'customer_id': [43,12,40,43, 12],
'days_since_year_began': [23,32,13,45,90],
'action' : ['buy', 'buy', 'buy', 'sell', 'sell'],
'product_id': [4324, 123, 12, 4324, 123]})
customer_id days_since_year_began action product_id
0 43 23 buy 4324
1 12 32 buy 123
2 40 13 buy 12
3 43 45 sell 4324
4 12 90 sell 123
我需要找到一年中所有客户持有的最大产品数量(此数据集中的每一行)。最初,我在考虑一个groupby customer_id和action,但是最终只给出了每个的数量。
预期的答案(仅适用于上面的5行-并不是一个很好的例子,但您会发现漂移):
customer_id | max_held | days_since_year_began
43 | 1 | 23
12 | 1 | 32
40 | 1 | 13
强力解决方案很明显,但是我将如何有效地做到这一点?
谢谢!
答案 0 :(得分:2)
也许这可以帮助您指导正确的方向。将buy
和sell
映射到+1
和-1
并应用累积金额可以帮助您获得一个客户拥有多少产品的时间序列。
df['cumhold'] = (df.replace({'buy': 1, 'sell': -1})
.groupby('customer_id')
.action.cumsum())
df.loc[df.groupby('customer_id', as_index=False).cumhold.max().index]