首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大熊猫-有条件的群

大熊猫-有条件的群
EN

Stack Overflow用户
提问于 2020-07-22 19:23:13
回答 4查看 541关注 0票数 4

我想根据我的熊猫数据根据给定的范围条件进行分组。例如:

代码语言:javascript
复制
Number, Amount
1, 5
2, 10
3, 11
4, 3
5, 5
6, 8
7, 9
8, 6

射程条件:

1到4(包括),命名为A: 5+10+11+3 = 29

5及更高,命名为B: 5+8+9+6 = 28

预期结果:

代码语言:javascript
复制
Number, Amount
A, 29
B, 28

编辑:谢谢你的解决方案。我希望能够增加更多的范围条件,如果需要,所以5-7和8本身也应该是一种可能性。有可能保持这种灵活性吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-07-22 19:43:53

您也可以使用pd.cut,如果更多地使用两个标签和范围,则会有所帮助:

代码语言:javascript
复制
df.groupby(pd.cut(df['Number'], 
                  bins=[0,4,np.inf], 
                  labels=['A', 'B']))['Amount'].sum().reset_index()

输出:

代码语言:javascript
复制
  Number  Amount
0      A      29
1      B      28
票数 4
EN

Stack Overflow用户

发布于 2020-07-22 19:30:21

您可以检查Number的值,然后将其映射到A,B然后groupby:

代码语言:javascript
复制
(df.Amount.groupby(df.Number.ge(5).map({True:'B',False:'A'}))
   .sum()
   .reset_index()
)

输出:

代码语言:javascript
复制
  Number  Amount
0      A      29
1      B      28
票数 4
EN

Stack Overflow用户

发布于 2020-07-22 19:34:07

np.where中使用groupby

代码语言:javascript
复制
df.groupby(np.where(df.Number <= 4, 'A', 'B')).Amount.sum().reset_index()

Out[16]:
  index  Amount
0     A      29
1     B      28

如果您需要匹配的列名,只需链接rename_axis

代码语言:javascript
复制
df_final = (df.groupby(np.where(df.Number <=4, 'A', 'B')).Amount.sum()
                                                         .rename_axis('Number')
                                                         .reset_index())

Out[25]:
  Number  Amount
0      A      29
1      B      28
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63041709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档