看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
当你有一个包含大量数据的 DataFrame,并且想要对其中的某些列进行汇总时,按组统计是非常有用的。例如,你可能有一个包含销售数据的 DataFrame,想要按不同地区和产品类型对销售额进行汇总。
注:本例在 pandas 2.2 下通过,同时建议安装 pyarrow 库。
我们构造数据如下:
import pandas as pd
import io
data = '''
b1 b2 b3 c
aa bb cc a
ac bc cd b
ac ad cc a
ad cd ae b
'''
df = pd.read_csv(io.StringIO(data), sep=r'\s+')
df
# ...
需要按 c 列进行分组,并按组统计值的数量,最终结果如下:
'''
c a b
aa 1 0
ac 1 1
ad 1 1
ae 0 1
bb 1 0
bc 0 1
cc 2 0
cd 0 2
'''
我们这里有几个思路:
根据以上思路,实现的最终代码如下:
(
df.groupby('c')
.apply(lambda x: x.unstack().value_counts(), include_groups=False)
.unstack()
.fillna(0)
.T
.astype(int)
)
或者:
(
df.set_index('c')
.apply(list, axis=1)
.explode()
.groupby(level=0)
.value_counts()
.unstack()
.fillna(0)
.astype(int)
.T
)
或者:
(
df.set_index('c')
.stack()
.droplevel(level=1)
.groupby(level=0)
.value_counts()
.to_frame()
.unstack()
.T
.droplevel(level=0)
.fillna(0)
.astype(int)
)
这样就实现了需求。
(完)
更新时间:2024-08-18 16:21:53 标签:pandas python 统计 数量