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

如何在Pandas中以name列为筛选条件统计A1-A3列值的重复次数

解决按name分组统计多列值出现次数的问题

需求说明

现有如下数据:

nameA1A2A3
Firstacd
Secondbaa
Firstacd
Firstacd
Firstacd
Secondbaa

需要按name列分组,统计A1至A3列中每个值(a/b/c/d)的重复次数,得到如下结果:

nameabcd
First4044
Second4200

解决方案代码

import pandas as pd

# 构造示例数据
data = pd.DataFrame({
    'name': ['First', 'Second', 'First', 'First', 'First', 'Second'],
    'A1': ['a', 'b', 'a', 'a', 'a', 'b'],
    'A2': ['c', 'a', 'c', 'c', 'c', 'a'],
    'A3': ['d', 'a', 'd', 'd', 'd', 'a']
})

# 步骤1:将A1-A3列转为长格式
melted_data = data.melt(id_vars='name', value_vars=['A1', 'A2', 'A3'], value_name='value')

# 步骤2:按name和value分组统计数量
counts = melted_data.groupby(['name', 'value']).size().reset_index(name='count')

# 步骤3:转成宽格式,填充缺失值为0
result = counts.pivot_table(index='name', columns='value', values='count', fill_value=0)

# 步骤4:调整列的顺序为a、b、c、d(确保和需求格式一致)
result = result[['a', 'b', 'c', 'd']].reset_index()

print(result)

代码解释

  • melt函数:把原宽表(A1/A2/A3为列)转成长表,每一行对应name和某一列的取值,实现多列值的统一统计。
  • groupby+size:按name和value分组,统计每组行数,即每个值在对应name组内的出现次数。
  • pivot_table:将长表转回宽表,把value作为列,缺失的组合(比如First组没有b)填充为0,保证所有目标值都有对应列。
  • 调整列顺序:确保输出列按a、b、c、d排列,匹配需求的结果格式。

输出结果

运行代码后得到:

name  a  b  c  d
0   First  4  0  4  4
1  Second  4  2  0  0

内容的提问来源于stack exchange,提问作者Init5 God

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:18:36