如何在Pandas中将同一列的两类数据转为独立列并去重?
Pandas拆分同一列的两类数据为独立列(去重)
核心思路
利用透视或分组展开的方式,将subject列的'Tot'和'voluntary'作为新列名,把对应数值映射到同一行,同时保留其他标识列,自然避免行重复。
方案一:使用pivot(无重复标识组合场景)
如果你的数据中,每个标识组合(比如country、year、sector)仅对应'Tot'和'voluntary'各一行,直接用pivot最简洁:
# 替换为你的DataFrame名称和实际列名 pivoted_df = df.pivot( index=['country', 'year', 'sector'], # 所有需要保留的非拆分列 columns='subject', values='value' # 需要关联到新列的数值列 ).reset_index() # 清理列名,移除多级索引 pivoted_df.columns = ['country', 'year', 'sector', 'Tot', 'voluntary']
方案二:使用groupby+unstack(含重复标识组合场景)
如果存在同一标识组合对应多行相同subject的情况,先聚合再展开:
# 先按标识列+subject分组,用sum/mean等聚合重复值(根据需求选择) grouped = df.groupby(['country', 'year', 'sector', 'subject'])['value'].sum() # 展开subject为列 unstacked_df = grouped.unstack('subject').reset_index() # 重命名列 unstacked_df.columns = ['country', 'year', 'sector', 'Tot', 'voluntary']
效果说明
处理后的数据会将原两行的'Tot'和'voluntary'数值合并到同一行的独立列中,完全消除行重复,最终结构示例:
| country | year | sector | Tot | voluntary |
|---|---|---|---|---|
| AUS | 2000 | PUB | 123 | 45 |
| AUS | 2001 | PUB | 67 | 89 |
内容的提问来源于stack exchange,提问作者user7502173
相关产品推荐
相关产品推荐

