首页 > 解决方案 > 查找每个客户拥有的最大产品数量

问题描述

我有一个特定年份的客户购买 + 产品销售的交易数据库,格式如下:

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

蛮力解决方案是显而易见的,但我将如何有效地做到这一点?

谢谢!

标签: pythonpandas

解决方案


也许这有助于引导你走向正确的方向。映射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]

推荐阅读