You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:45:09