查找每个客户拥有的最大产品数量

时间:2019-11-26 15:21:56

标签: python pandas

我具有以下形式的给定年份的客户购买量+产品销售量的交易数据库:

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

强力解决方案很明显,但是我将如何有效地做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:2)

也许这可以帮助您指导正确的方向。将buysell映射到+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]