看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在 Excel 中,我们经常会对一个分类增加一个汇总行,方便查看此类数据的总体数据。那么,利用 pandas 如何实现这样的功能呢?本例我们就来试一试。
我们的数据如下:
import pandas as pd
from io import StringIO
data = '''
x y z
a e 3
a f 4
b g 5
'''
df = pd.read_csv(StringIO(data), sep=r'\s+')
df
# ...
# 期望结果
'''
x y z
0 a e 3
1 a f 4
0 a total 7
2 b g 5
1 b total 5
'''
以 x 列为分组,有 a、b 两组数据,我们想在 a 下方和 b 下方分别增加一行数据,表示该组的汇总值,同时要求汇总行对应 x 列显示组名,y 列显示 total,z 列显示此组 z 列的汇总之和。
显然,这是一个分组问题,对数据进行分组,然后再进行拼接。
我们可以这样:先得到 x 分组后的汇总数据,再将此汇总数据与原数据拼合起来,最后进行排序即可完成。
分组计算汇总值,为方便后续合并,不保留索引。
df1 = df.groupby('x', as_index=False).sum(numeric_only=True)
df1
'''
x z
0 a 7
1 b 5
'''
与原数据合并:
pd.concat([df, df1])
'''
x y z
0 a e 3
1 a f 4
2 b g 5
0 a NaN 7
1 b NaN 5
'''
缺失值填充为 total:
(
pd.concat([df, df1])
.fillna('total')
)
'''
x y z
0 a e 3
1 a f 4
2 b g 5
0 a total 7
1 b total 5
'''
按 x 列进行排序:
(
pd.concat([df, df1])
.fillna('total')
.sort_values('x')
)
'''
x y z
0 a e 3
1 a f 4
0 a total 7
2 b g 5
1 b total 5
'''
这样就得到了我们想要的数据。
(完)
更新时间:2024-08-18 16:00:49 标签:pandas python 汇总