Python pandas中df.pivot透视表自定义列名的实现方法
错误原因
pandas的pivot方法中,columns参数需要传入源DataFrame中已存在的列,用来作为透视生成列的分组依据。你直接传入自定义的列名['x0','x1','x2'],但源数据中没有这些列,因此触发KeyError。
解决方法
你需要先为每个Id分组下的行生成组内序号(对应你要的x后缀的下标),再执行透视,最后重命名列即可:
- 先按
Id和Date排序,保证同个Id下的Value顺序符合预期,同时生成组内序号列
# 按Id和时间排序,避免数据顺序混乱导致结果不对 df = df.sort_values(['Id', 'Date']).reset_index(drop=True) # 生成每个Id分组内的行序号,从0开始计数 df['col_index'] = df.groupby('Id').cumcount()
- 执行透视操作
res = df.pivot(index='Id', columns='col_index', values='Value')
- 重命名列名
- 如果需要生成
x0到x2共3列:
res.columns = [f'x{i}' for i in range(3)]
- 如果需要生成
x0到x49共50列,只需修改range的参数即可:
res.columns = [f'x{i}' for i in range(50)] # 如果部分Id的记录数不足50,会自动生成NaN值,可按需填充缺失值,比如填充为0: # res = res.fillna(0)
执行后res就是你需要的结果。
内容的提问来源于stack exchange,提问作者nilsinelabore
相关产品推荐
相关产品推荐

