pandas使用groupby聚合后如何显示聚合列的列名
问题说明
当前使用的测试DataFrame数据如下:
Client Date Amount Jack 10/01/2020 100 Jack 10/01/2020 200 Jack 10/01/2020 300 Jack 10/01/2020 400 Jack 12/01/2020 100 Jack 12/01/2020 100 Jack 13/01/2020 100
使用pandas的groupby函数做聚合计算时,返回结果仅展示聚合数值,不显示被聚合的Amount列名,需要保留该列名以便后续操作引用。
已尝试的代码及运行结果:
result = df.groupby(["Client", "Date"])["Amount"].sum()
运行输出:
Client Date Jack 10/01/2020 1000 Jack 12/01/2020 200 Jack 13/01/2020 100
期望输出(明确展示Amount列名):
Client Date Amount Jack 10/01/2020 1000 Jack 12/01/2020 200 Jack 13/01/2020 100
原因分析
上述写法返回的结果是pandas Series类型,不是DataFrame:Client和Date是该Series的多级索引,聚合计算得到的值是Series的元素值,因此不会单独展示Amount作为列名。
解决方法
任选以下一种写法即可得到带完整列名的DataFrame结果:
- 方法1:调用
reset_index()将索引转回普通列result = df.groupby(["Client", "Date"])["Amount"].sum().reset_index() - 方法2:
groupby时传入as_index=False参数,禁止将分组字段设为索引,直接返回标准结构的DataFrameresult = df.groupby(["Client", "Date"], as_index=False)["Amount"].sum() - 方法3:对要聚合的列使用双中括号选取,返回结果默认是DataFrame类型,再重置索引即可
result = df.groupby(["Client", "Date"])[["Amount"]].sum().reset_index()
三种写法运行后输出结构完全一致,均保留Client、Date、Amount三个列名,符合预期需求。
内容的提问来源于stack exchange,提问作者The Legendary YELLOW
相关产品推荐
相关产品推荐

