在Pandas DataFrame中按条件统计各类别根帖与评论的出现次数
嘿,这个分类统计需求很常见,我给你两种实用的实现方法,都能轻松得到每个类别下根帖和评论的数量:
方法一:用groupby + agg自定义统计
这种方法灵活性高,能直接指定要统计的两个条件:
import pandas as pd # 按category分组,分别计算根帖(depth=0)和评论(depth>0)的数量 stats_df = cat_df.groupby('category').agg( 根帖数量=('depth', lambda col: (col == 0).sum()), 评论数量=('depth', lambda col: (col > 0).sum()) ).reset_index() # 可选:添加总数列,和你之前用value_counts得到的结果对应 stats_df['总数量'] = stats_df['根帖数量'] + stats_df['评论数量'] # 查看前15个类别的统计结果 print(stats_df.head(15))
这段代码的逻辑很清晰:先按category分组,然后对每个组的depth列用lambda函数分别统计符合条件的行数,最后reset_index把分组索引变回普通列,方便查看。
方法二:用pd.crosstab快速生成交叉统计
如果想要更简洁的写法,交叉表crosstab是绝佳选择:
# 先把depth转换成根帖/评论的标签,再生成交叉表 stats_cross = pd.crosstab( index=cat_df['category'], columns=cat_df['depth'].map(lambda x: '根帖' if x == 0 else '评论') ) # 同样可以添加总数列 stats_cross['总数量'] = stats_cross.sum(axis=1) print(stats_cross.head(15))
crosstab会自动帮你统计每个类别下,根帖和评论各自的数量,输出格式是行列清晰的表格,非常直观。
两种方法得到的结果都能和你之前用value_counts()得到的总数量完全对应,你可以根据自己的习惯选择~
内容的提问来源于stack exchange,提问作者user40
相关产品推荐
相关产品推荐

