透视数据帧以自动生成列

时间:2016-11-04 09:27:49

标签: python pandas dataframe pivot multiple-columns

我有一个像这样的数据框

Date Lag
d1    20
d1    30
d1    40
d2    10
d2    50

并希望转换为类似的内容

Date  <column names>
d1    20 30 40
d2    10 50 None

列可以命名为任何名称。任何方式这样做?

1 个答案:

答案 0 :(得分:1)

我认为您需要在cumcount之前为新列创建新的列名,然后使用pivot

print (df)
  Date  Lag
0   d1   20
1   d1   30
2   d1   40
3   d2   10
4   d2   50

df['g'] = df.groupby('Date')['Lag'].cumcount()
df = df.pivot(index='Date', columns='g', values='Lag')
print (df)
g        0     1     2
Date                  
d1    20.0  30.0  40.0
d2    10.0  50.0   NaN

您还可以更改列名称:

df['g'] = 'Col' + df.groupby('Date')['Lag'].cumcount().astype(str)
print (df)
  Date  Lag     g
0   d1   20  Col0
1   d1   30  Col1
2   d1   40  Col2
3   d2   10  Col0
4   d2   50  Col1

df = df.pivot(index='Date', columns='g', values='Lag')
print (df)
g     Col0  Col1  Col2
Date                  
d1    20.0  30.0  40.0
d2    10.0  50.0   NaN