如何统计Pandas中多列组合(如城市与国家)的出现次数?
如何统计Pandas中多列组合(如城市与国家)的出现次数?
嗨,你的这个需求其实挺常见的,确实不用特意新增一列来做统计,Pandas有好几种更简洁的原生方法能直接实现,我给你详细说说:
方法一:用value_counts()直接统计
这个方法本来就是为统计唯一组合出现次数设计的,用法非常直接:
df = pd.DataFrame([('London', 'UK'), ('Paris', 'FR'), ('Paris', 'US'), ('London', 'UK')], columns=['city', 'country']) count_df = df[['city', 'country']].value_counts().reset_index(name='n')
value_counts()会自动统计每一组(city, country)的出现次数,默认按次数降序排列;如果想保留原数据里的组合顺序,可以加上sort=False参数。最后用reset_index()把索引转为普通列,再通过name='n'指定计数列的名称,就能得到你想要的结果啦。
方法二:用groupby().size()统计分组大小
这个方法更贴合“统计分组行数”的需求,比count()更精准(count()会统计每列的非空值数量,而size()直接返回分组的元素总数):
count_df = df.groupby(['city', 'country']).size().reset_index(name='n')
分组之后调用size(),直接就能拿到每个组合的出现次数,再转成DataFrame并指定列名,代码简洁又高效,完全不需要额外创建辅助列。
你原来的方法虽然能跑通,但确实没必要多此一举加一列全1的字段,上面这两种都是Pandas原生支持的规范写法,用起来更顺手~
备注:内容来源于stack exchange,提问作者Bean Taxi
相关产品推荐
相关产品推荐

