python - 当用户购买了某个类别时,寻找其他类别的销售?
问题描述
我有以下格式的数据。这是不同类别的 user_id 级别的销售日期。
id cat_1 cat_2 cat_3
1 1 10 100
2 2 0 0
3 0 20 0
5 3 0 0
6 4 0 0
9 5 0 0
10 0 30 200
11 6 0 300
12 7 0 0
13 8 40 400
我想要数据,比如当用户购买了某个类别时,其他类别的销售额是多少。例如。当 cat_1 不等于 0 时,cat_2 和 cat_3 的销售额是多少。
cat_1 cat_2 cat_3
cat_1 36 50 800
cat_2 9 100 700
cat_3 15 80 1000
它可以在 excel 中完成,但通过 pandas 寻找方法。
解决方案
使用字典理解和过滤行的总和 byboolean indexing
和Series.eq
( >
),通过 连接在一起concat
并重塑Series.unstack
:
#if id is not index
df = df.set_index('id')
df = pd.concat({x:df[df[x].gt(0)].sum() for x in df.columns}).unstack()
#alternative
#df = pd.concat({x:df[df[x].gt(0)].sum() for x in df.columns}, axis=1).T
print (df)
cat_1 cat_2 cat_3
cat_1 36 50 800
cat_2 9 100 700
cat_3 15 80 1000
推荐阅读
- android - 带有图像的 Android 消耗性列表视图
- android - ExoPlayer 和 SimpleExoPlayer 有什么区别?
- sql-server - 在 MS-SQL 中创建主键会产生动态索引名称格式,例如 PK__dummy__3213E83F2E1BDC42
- c# - 程序不会让我以任何方式清除我的 listBox [C#, WinForms]
- javascript - 如何在 React-hooks 中创建计时器
- python - 如何通过 tox 将 *.py 传递给 pycco?
- jquery - Cropper 不是一个函数
- javascript - 菜单打开时反应选择阻止滚动
- python - pytesseract image_to_string 不够准确
- java - Selenium Edge WebDriver (Chromium) - 未创建会话:未找到匹配的功能