旋转数据框以自动生成列

Pivot dataframe to automatically make columns

我有这样一个数据框

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

并想转换成这样的东西

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

列可以任意命名。有什么办法吗?

我认为您需要通过 cumcount to new column and then use 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