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

Pandas DataFrame行分组转置:自定义列名及去重问题求助

Pandas 数据重塑:按分组转换列名并去重

你的代码存在两个核心问题:

  • assign循环中生成的lambda函数延迟执行,最终都引用了循环最后一次的c值,导致b_2021列数值错误
  • 未对a列做分组聚合,所以保留了原始6行数据,出现a列重复

正确实现方法

使用pivot方法直接完成分组、列转换和去重,代码如下:

import pandas as pd

df = pd.DataFrame({
    'a':[111, 111, 222, 222, 333, 333],
    'b':[2020, 2021, 2020, 2021, 2020, 2021],
    'c':[33.2, 48.3, 32.2, 45.5, 45.5, 78.4]
})

# 重塑数据:按a分组,将b的取值转为列,c作为对应值
result_df = df.pivot(index='a', columns='b', values='c').reset_index()
# 调整列名为目标格式
result_df.columns = ['a'] + [f'b_{year}' for year in result_df.columns[1:]]
print(result_df)

代码说明

  • pivot(index='a', columns='b', values='c'):自动按a分组,把b中的年份值转为列名,c的数值对应填充,天然去重a列,得到3行结果
  • 最后通过列表推导式修改列名,将年份列改为b_年份的格式

原代码问题解析

  • 循环生成lambda时,所有lambda不会立即执行,直到assign完成后才会取值,此时所有lambda引用的都是循环最后一次的df['b'].iloc[i]对应的c值,导致列值错误
  • 没有做分组或去重操作,所以保留了原始的6行数据,a列重复

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:21:03