我有以下DataFrame。
print df
Period Hour
0 22 6665
1 22 8290
2 22 8589
3 22 9808
4 22 10010
5 22 9152
6 22 7701
7 23 6658
8 23 10039
9 23 8396
10 23 9130
11 23 9029
12 23 7985
13 23 6784
最初我想通过某一行代码实现什么:
22 23
6665 6658
8290 10039
8589 8396
9808 9130
10010 9029
9152 7985
7701 6784
尝试旋转,但由于索引不同而获得NaN。
print(df.pivot(columns='Period'))
Hour
Period 22 23
0 6665.0 NaN
1 8290.0 NaN
2 8589.0 NaN
3 9808.0 NaN
4 10010.0 NaN
5 9152.0 NaN
6 7701.0 NaN
7 NaN 6658.0
8 NaN 10039.0
9 NaN 8396.0
10 NaN 9130.0
11 NaN 9029.0
12 NaN 7985.0
13 NaN 6784.0
通过以下显然不必要的长途路线实现的输出:
a = df[df['Period'] == 22]['Hour'].values
b = df[df['Period'] == 23]['Hour'].values
print(pd.DataFrame({22:a, 23:b}))
22 23
0 6665 6658
1 8290 10039
2 8589 8396
3 9808 9130
4 10010 9029
5 9152 7985
6 7701 6784
必须通过Pivot / Pivot_Table或其他一些较短的代码来完成此操作。请提出建议。
答案 0 :(得分:1)
尝试一下:
选项1:
df.set_index([df.groupby('Period').cumcount(),'Period'])['Hour'].unstack()
输出:
Period 22 23
0 6665 6658
1 8290 10039
2 8589 8396
3 9808 9130
4 10010 9029
5 9152 7985
6 7701 6784
选项2:
df.pivot(df.groupby('Period').cumcount(), 'Period')['Hour']