通过对具有数字和字符串变量的Dataframe进行分组来转置

我有一个 DataFrame,我想将其转换为以下内容:

import pandas as pd
df = pd.DataFrame({'ID':[111,111,111,222,222,333],
                   'class':['merc','humvee','bmw','vw','bmw','merc'],
                   'imp':[1,2,3,1,2,1]})
print(df)
    ID   class  imp
0  111    merc    1
1  111  humvee    2
2  111     bmw    3
3  222      vw    1
4  222     bmw    2
5  333    merc    1

期望的输出:

    ID       0        1       2
0  111    merc   humvee     bmw
1  111       1        2       3
2  222      vw      bmw
3  222       1        2
4  333    merc      
5  333       1

我希望transpose整个数据框,但grouped by一个特定的列,ID在这种情况下,并维护行order

我的尝试:我尝试使用.set_index() und .unstack(),但没有用。

回答

使用GroupBy.cumcount计数器,然后通过重塑DataFrame.stackSeries.unstack

df1 = (df.set_index(['ID',df.groupby('ID').cumcount()])
         .stack()
         .unstack(1, fill_value='')
         .reset_index(level=1, drop=True)
         .reset_index())
print (df1)
    ID     0       1    2
0  111  merc  humvee  bmw
1  111     1       2    3
2  222    vw     bmw     
3  222     1       2     
4  333  merc             
5  333     1             


以上是通过对具有数字和字符串变量的Dataframe进行分组来转置的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>