Python 在数据帧中转置列,同时使用重复项保持其他列的完整性
我的数据框架如下Python 在数据帧中转置列,同时使用重复项保持其他列的完整性,python,pandas,csv,dataframe,transpose,Python,Pandas,Csv,Dataframe,Transpose,我的数据框架如下 selection_id last_traded_price 430494 1.46 430494 1.48 430494 1.56 430494 1.57 430495 2.45 430495 2.67 430495 2.72 430495 2.87 我有很多行包含selection id,我需要保持selection\u id列不变,但将上次交易价格中的数据转
selection_id last_traded_price
430494 1.46
430494 1.48
430494 1.56
430494 1.57
430495 2.45
430495 2.67
430495 2.72
430495 2.87
我有很多行包含selection id,我需要保持selection\u id列不变,但将上次交易价格中的数据转换为如下所示
selection_id last_traded_price
430494 1.46 1.48 1.56 1.57 e.t.c
430495 2.45 2.67 2.72 2.87 e.t.c
我试过使用枢轴
(df.pivot(index='selection_id', columns=last_traded_price', values='last_traded_price')
Pivot无法工作,因为选择中的行重复。\u id。
是否可以先转置数据,然后删除重复数据?选项1
groupby
+apply
v = df.groupby('selection_id').last_traded_price.apply(list)
pd.DataFrame(v.tolist(), index=v.index)
0 1 2 3
selection_id
430494 1.46 1.48 1.56 1.57
430495 2.45 2.67 2.72 2.87
选项2
您可以使用
pivot
执行此操作,只要有另一列计数要传递给数据透视(这就是为什么需要沿某个方向进行数据透视)
对于由+或创建的新列名,可以使用for Counter:
与枢轴类似的解决方案:
df = pd.pivot(index=df['selection_id'],
columns=df.groupby('selection_id').cumcount(),
values=df['last_traded_price'])
print (df)
0 1 2 3
selection_id
430494 1.46 1.48 1.56 1.57
430495 2.45 2.67 2.72 2.87
现在完全可以了,只有您可以将
pd.Series.tolist
更改为list
以获得更好的答案;)@耶斯雷尔非常感谢你,这正是我能从中受益的…@耶斯雷尔谢谢你的回答解决了我的问题。我会给最好的答案打分,但我没有足够的声誉去做这件事。我会的@你仍然可以接受他的回答。你也可以把两个答案都投上一票,因为我认为它们都很好。@coldspeed我试过运行这两个解决方案,但由于某些原因,我的输出并不是我所期望的。也许我在最初的问题上不够具体。出于某种原因,选择_id也沿列打印。我需要先转置上次交易的价格,然后在转置完成后删除包含重复选择id的行。我还想提一下,我正在400万行上尝试!
g = df.groupby('selection_id').cumcount()
df = df.set_index(['selection_id',g])['last_traded_price'].unstack()
print (df)
0 1 2 3
selection_id
430494 1.46 1.48 1.56 1.57
430495 2.45 2.67 2.72 2.87
df = pd.pivot(index=df['selection_id'],
columns=df.groupby('selection_id').cumcount(),
values=df['last_traded_price'])
print (df)
0 1 2 3
selection_id
430494 1.46 1.48 1.56 1.57
430495 2.45 2.67 2.72 2.87