我有这个示例数据框,
A B Date C
0 83.04 82.70 01012019 0.0
1 83.04 82.71 01012019 3.0
2 83.02 82.70 02012019 0.0
3 83.02 82.69 02012019 5.0
4 82.98 82.67 03012019 2.0
5 81.28 79.61 03012019 3.0
当我使用此代码时
output = combined.assign(Period=df.groupby('Date').cumcount()).pivot(index='Period', columns='Date',values=['A','B','C'])
我收到了一个带有错误列标题的新数据框(我希望日期成为该列)
我如何交换第一行和第二行,以便第二行成为该列?
答案 0 :(得分:2)
您有MultiIndex
列,因此,如果删除最高级别,则仅返回date
列即可返回数据框。
df['Period'] = df.groupby('Date').cumcount()
df_new = df.pivot_table(values=['A', 'B', 'C'], columns='Date', index='Period')
df_new.columns = [col[1] for col in df_new.columns]
1012019 2012019 3012019 1012019 2012019 3012019 1012019 2012019 3012019
Period
0 83.04 83.02 82.98 82.70 82.70 82.67 0.0 0.0 2.0
1 83.04 83.02 81.28 82.71 82.69 79.61 3.0 5.0 3.0
编辑
要简单地交换级别,可以使用.swaplevel()
:
df_new = df.pivot_table(values=['A', 'B', 'C'], columns='Date', index='Period')
df_new.columns = df_new.columns.swaplevel()
#Output
Date 1012019 2012019 3012019 1012019 2012019 3012019 1012019 2012019 3012019
A A A B B B C C C
Period
0 83.04 83.02 82.98 82.70 82.70 82.67 0.0 0.0 2.0
1 83.04 83.02 81.28 82.71 82.69 79.61 3.0 5.0 3.0
答案 1 :(得分:0)
另一种解决方案:
df['Period'] = df.groupby('Date').cumcount()
df.set_index(['Period', 'Date']).unstack()