python - Pandas groupby 削减总和
问题描述
我正在尝试对一列进行分箱并获取满足索引条件的行的总和。
这是我正在使用的 DataFrame 类型的示例:
df
A B C D
a aa 0 1
a aa 1 2
a aa 2 10
a bb 0 4
a bb 1 5
a bb 2 60
b aa 0 7
b aa 1 8
b aa 2 90
b bb 0 10
b bb 1 11
b bb 2 12
我想做的是首先对特征列C
(即0,1
isf0
和2
is f1
)进行分类,并对每个 bin 中列中的值求和,D
并且仍然保持各自的A
索引对和 B` 索引对完整。结果如下:
A B C D
a aa f0 3
a aa f1 10
a bb f0 9
a bb f1 60
b aa f0 15
b aa f1 90
b bb f0 21
b bb f1 12
我已经使用pandas.cut
这样的方法完成了分箱:
cut = pd.cut(df['C'], bins=[0,2,3], right=False, labels=['f0','f1'])
但是我在保持索引对(列A,B
)完好无损时遇到了麻烦df.groupby(cut)
,我不想遍历所有可能的(A,B)
对并自己对它们进行 bin + 求和。
任何帮助,将不胜感激。
解决方案
您需要将定义所需组的附加列添加到您的 groupby 语句中:
from io import StringIO
import pandas
df = pandas.read_table(StringIO("""\
A B C D
a aa 0 1
a aa 1 2
a aa 2 10
a bb 0 4
a bb 1 5
a bb 2 60
b aa 0 7
b aa 1 8
b aa 2 90
b bb 0 10
b bb 1 11
b bb 2 12"""), sep='\s+')
output = (
df.assign(C=pandas.cut(df['C'], bins=[0,2,3], right=False, labels=['f0','f1']))
.groupby(['A', 'B', 'C'], as_index=False)
.sum()
)
A B C D
a aa f0 3
a aa f1 10
a bb f0 9
a bb f1 60
b aa f0 15
b aa f1 90
b bb f0 21
b bb f1 12
推荐阅读
- javascript - 为什么更改 CSS 属性的基值会禁用悬停激活?
- c++ - Direct2D如何正确绘制文字并实现轮廓效果
- python - 启动 discord.py 机器人时出现错误
- java - 使用 Springboot 从 sql 数据库下载图像文件
- reactjs - 我正在尝试创建一个 react.js 项目,但在我的每个关于 index.js 文件的项目中都发生了同样的错误,如何解决这个错误?
- python - 寻找一种更快的方法来替换 pandas DatetimeIndex 中的年份
- google-apps-script - 初学者问题自定义谷歌助手操作
- asp.net-core - 从 ASP.NET Core 1.0 直接迁移到 ASP.NET Core 3.1
- excel - 匹配列中的数据,然后更新值
- javascript - new Date().getUTCDay() 与分配给它的变量不同