我有一个像这样的数据框
Date Lag
d1 20
d1 30
d1 40
d2 10
d2 50
并希望转换为类似的内容
Date <column names>
d1 20 30 40
d2 10 50 None
列可以命名为任何名称。任何方式这样做?
答案 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