Pandas透视时重复值不聚合生成新行的实现方法咨询
你遇到的问题是直接使用pivot时仅用id作为行索引,同id同group下的多值会触发默认聚合运算,只要先给同id同group下的每条记录添加唯一序号作为额外行索引即可避免聚合,实现你要的效果。
具体实现代码如下:
import pandas as pd import numpy as np df = pd.DataFrame({'id': ['i1','i1','i1','i2','i2','i2','i2','i2','i3','i3'], 'group': ['group1','group1','group2','group3','group1','group2','group2','group3','group1','group2'], 'choice':[12,11,12,14,11,19,9,7,8,9]}) # 为id+group分组内的每条记录生成累计序号,用来区分同组下的多条数据 df['row_num'] = df.groupby(['id', 'group']).cumcount() # 透视时同时用id和row_num作为行索引,不会触发聚合 result = df.pivot(index=['id', 'row_num'], columns='group', values='choice').reset_index() # 移除多余的序号列,清除columns的索引名 result = result.drop(columns='row_num').rename_axis(columns=None)
运行后输出的result就是你需要的目标结构:
id group1 group2 group3 0 i1 12.0 12.0 NaN 1 i1 11.0 NaN NaN 2 i2 11.0 19.0 14.0 3 i2 NaN 9.0 7.0 4 i3 8.0 9.0 NaN
内容的提问来源于stack exchange,提问作者siash
相关产品推荐
相关产品推荐

