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

在Pandas中基于Country列统计Value列各值计数并生成分类列

Pandas分组统计并重塑DataFrame解决方案

原始数据

Country    |    Value
 England           1
 England           1
 England           2
  USA              3
  USA              3
  USA              2
 Germany           1
 Thailand          2

目标效果

Country    |    Value      Cat 1   cat 2  cat 3
 England           1        2       1      0
  USA              3        0       1      2
 Germany           1       1        0      0
 Thailand          2       0        1      0

实现代码

import pandas as pd

# 构造原始DataFrame
data = {
    'Country': ['England', 'England', 'England', 'USA', 'USA', 'USA', 'Germany', 'Thailand'],
    'Value': [1, 1, 2, 3, 3, 2, 1, 2]
}
df = pd.DataFrame(data)

# 1. 统计每组各Value的出现次数,转成宽表并补全缺失列
counts_df = df.groupby('Country')['Value'].value_counts().unstack(fill_value=0)
counts_df = counts_df.rename(columns={1: 'Cat 1', 2: 'cat 2', 3: 'cat 3'})
# 确保三个分类列都存在,避免部分国家无对应值时列缺失
for col in ['Cat 1', 'cat 2', 'cat 3']:
    if col not in counts_df.columns:
        counts_df[col] = 0

# 2. 获取每个国家对应的代表Value(取出现次数最多的众数)
value_df = df.groupby('Country')['Value'].agg(lambda x: x.mode().iloc[0])

# 3. 合并结果并调整列顺序
result_df = pd.concat([value_df, counts_df], axis=1).reset_index()
result_df = result_df[['Country', 'Value', 'Cat 1', 'cat 2', 'cat 3']]

# 输出结果
print(result_df)

代码说明

  • 统计计数:通过groupby结合value_counts统计每个国家下各Value的出现次数,unstack将长表转为宽表,fill_value=0填充未出现的值为0。
  • 保留代表Value:使用mode().iloc[0]取每组出现次数最多的Value(众数),如果存在多个众数则取第一个,和示例逻辑一致。
  • 合并与调整:将代表Value和计数结果合并,调整列顺序与目标格式匹配。

内容的提问来源于stack exchange,提问作者Nithin Ramayanam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:36:32