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