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

pandas如何将列值转为独立列并按分组聚合对应值

Pandas分组聚合转宽表实现方案

实现逻辑

  • 以Groups列为行分组维度
  • 将Species_2列的所有唯一值展开为单独列
  • 同组同列下匹配到的多个Species_1值用;拼接,无匹配值填充NA

完整实现代码

import pandas as pd

# 加载测试数据
test_data = {'Groups': {0: 'G1', 1: 'G1', 2: 'G1', 3: 'G1', 4: 'G1', 5: 'G2', 6: 'G2', 7: 'G3'}, 
        'Species_1': {0: 'SP1_A', 1: 'SP1B', 2: 'SP2_AZ', 3: 'SP3_12:A', 4: 'SP4-2', 5: 'SP1_2', 6: 'SP3:21', 7: 'SP5(2)'}, 
        'Species_2': {0: 'SP1', 1: 'SP1', 2: 'SP2', 3: 'SP3', 4: 'SP4', 5: 'SP2', 6: 'SP3', 7: 'SP5'}}
df = pd.DataFrame(test_data)

# 核心方法1:pivot_table透视实现
result = df.pivot_table(
    index='Groups',
    columns='Species_2',
    values='Species_1',
    aggfunc=lambda x: ';'.join(x),
    fill_value=pd.NA
).reset_index()
result.columns.name = None

# 核心方法2:groupby+unstack实现,效果和方法1完全一致
# result = df.groupby(['Groups', 'Species_2'])['Species_1'].agg(';'.join).unstack(fill_value=pd.NA).reset_index()
# result.columns.name = None

# 若需要将缺失值显示为字符串NA,取消注释下一行即可
# result = result.fillna('NA')

print(result)

输出结果

Groups        SP1     SP2       SP3     SP4      SP5
0     G1  SP1_A;SP1B  SP2_AZ  SP3_12:A   SP4-2    <NA>
1     G2        <NA>   SP1_2    SP3:21    <NA>    <NA>
2     G3        <NA>    <NA>      <NA>    <NA>  SP5(2)

注:如果执行fillna('NA')步骤,输出中的<NA>会替换为字符串NA,和示例展示效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:27:07