旋转但索引不匹配问题导致NaN

时间:2019-12-11 19:14:15

标签: python pandas dataframe

我有以下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或其他一些较短的代码来完成此操作。请提出建议。

1 个答案:

答案 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']