pandas如何为每个COL1元素新增对应COL2不同值的计数列
问题描述
现有如下所示的pandas DataFrame:
COL1 COL2 A Human A Human A Human A Snake B Snake B Snake B Snake B Human C Baboon C Baboon D Baboon E Human E Human E Bird
需求为:针对每个COL1元素,统计其对应的不同COL2值的出现次数,将各计数值作为新列添加到原DataFrame中,最终预期输出如下:
COL1 COL2 Count_human Count_Snake Count_Baboon Count_Bird A Human 3 1 0 0 A Human 3 1 0 0 A Human 3 1 0 0 A Snake 3 1 0 0 B Snake 1 4 0 0 B Snake 1 4 0 0 B Snake 1 4 0 0 B Human 1 4 0 0 C Human 1 0 1 1 C Baboon 1 0 1 1 C Bird 1 0 1 1
实现代码
import pandas as pd # 构造示例数据,实际使用时替换为自己的DataFrame即可 data = { 'COL1': ['A','A','A','A','B','B','B','B','C','C','D','E','E','E'], 'COL2': ['Human','Human','Human','Snake','Snake','Snake','Snake','Human','Baboon','Baboon','Baboon','Human','Human','Bird'] } df = pd.DataFrame(data) # 1. 生成交叉表统计每个COL1分组下各COL2值的出现次数 count_stat = pd.crosstab(df['COL1'], df['COL2']).reset_index() # 2. 为统计列添加统一前缀匹配输出要求 count_stat.columns = ['COL1'] + [f'Count_{col}' for col in count_stat.columns[1:]] # 3. 按COL1字段将统计结果合并回原表 res = df.merge(count_stat, on='COL1', how='left') # 查看最终结果 print(res)
逻辑说明
pd.crosstab可以直接按两个维度生成计数交叉表,一步得到每个COL1对应不同COL2值的统计结果- 列名重命名操作统一添加前缀,完全匹配要求的输出列格式
- 左连接操作会将相同COL1的统计值映射到原表所有对应行,最终结果和预期完全一致
内容的提问来源于stack exchange,提问作者chippycentra
相关产品推荐
相关产品推荐

