我想根据我的熊猫数据根据给定的范围条件进行分组。例如:
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
预期结果:
Number, Amount
A, 29
B, 28编辑:谢谢你的解决方案。我希望能够增加更多的范围条件,如果需要,所以5-7和8本身也应该是一种可能性。有可能保持这种灵活性吗?
发布于 2020-07-22 19:43:53
您也可以使用pd.cut,如果更多地使用两个标签和范围,则会有所帮助:
df.groupby(pd.cut(df['Number'],
bins=[0,4,np.inf],
labels=['A', 'B']))['Amount'].sum().reset_index()输出:
Number Amount
0 A 29
1 B 28发布于 2020-07-22 19:30:21
您可以检查Number的值,然后将其映射到A,B然后groupby:
(df.Amount.groupby(df.Number.ge(5).map({True:'B',False:'A'}))
.sum()
.reset_index()
)输出:
Number Amount
0 A 29
1 B 28发布于 2020-07-22 19:34:07
在np.where中使用groupby
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
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 28https://stackoverflow.com/questions/63041709
复制相似问题