旋转数据框以自动生成列
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
我有这样一个数据框
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