现在,我有一个数据框df

>>> df = pd.DataFrame({'name':['a','a','b'], 'value1':[100,200,300], 'value2':[1,2,3]})
>>> df
  name  value1  value2
0    a     100       1
1    a     200       2
2    b     300       3


现在,我想将df更改为以下形式:

        name  value1  value2 name  value1  value2
          a     100       1    a     200       2
          b     300       3


那么,如何有效地转换df

最佳答案

使用cumcount + unstack

g = df.groupby('name').cumcount().astype(str)
df1 = (df.set_index([df['name'],g])
         .unstack()
         .sort_index(axis=1, level=1)
         .reset_index(drop=True))


对于唯一的列名称,请使用join

df1.columns = df1.columns.map('_'.join)
print (df1)
  name_0  value1_0  value2_0 name_1  value1_1  value2_1
0      a     100.0       1.0      a     200.0       2.0
1      b     300.0       3.0   None       NaN       NaN


如果要使用重复的列名,请使用droplevel

df1.columns = df1.columns.droplevel(1)
print (df1)
  name  value1  value2  name  value1  value2
0    a   100.0     1.0     a   200.0     2.0
1    b   300.0     3.0  None     NaN     NaN


编辑:

apply替代存在问题,因为所有dtypes都更改为object

关于python - 如何将DataFrame的行更改为 Pandas 中的列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46986846/

10-12 20:27