python - 查找每个客户拥有的最大产品数量
问题描述
我有一个特定年份的客户购买 + 产品销售的交易数据库,格式如下:
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
蛮力解决方案是显而易见的,但我将如何有效地做到这一点?
谢谢!
解决方案
也许这有助于引导你走向正确的方向。映射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]
推荐阅读
- ruby-on-rails - 按 ActiveRecord::AssociationRelation 排序
- python - 如何保存训练好的张量流模型的结构和权重?
- git - git中单个文件类型的特定差异工具,带有git-diff之类的标头信息
- html - 在编辑模式下更新 Gridview
- cloudkit - 如何使用 CKReference cloudkit IOS Swift 为数据库创建良好的结构?
- java - 我需要添加什么来使按钮打开另一个 JFrame/GUI
- regex - 仅在有 3 行时捕获文本的正则表达式
- exception - JUnit 测试失败,BufferedWriter 抛出 IOException
- c# - 如何从 .net 核心中的 Worker 返回响应
- android - NestedScrollView 内的 ViewPager 内的 ScrollView 不滚动