我希望将三列组合成一个数据框中的单个列,使用列标题作为新列的值。所有三列的唯一值都为'1',其他两列只有NaN。
最初我想使用pivot,但我怀疑合并操作会更容易吗?我只是不确定该怎么做。
即。我需要转
index A B C time id
0 1 NaN NaN 4.42 1
1 1 NaN NaN 4.48 3
2 1 NaN NaN 5.45 2
3 NaN 1 NaN 6.64 2
4 NaN 1 NaN 7.49 1
5 NaN 1 NaN 7.72 3
6 NaN NaN 1 8.13 1
7 NaN NaN 1 8.65 2
8 NaN NaN 1 9.07 3
...成
index type time id
0 A 4.42 1
1 A 4.48 3
2 A 5.45 2
3 B 6.64 2
4 B 7.49 1
5 B 7.72 3
6 C 8.13 1
7 C 8.65 2
8 C 9.07 3
答案 0 :(得分:2)
使用:
set_index
列stack
重新整理所有其他列 - NaNs
行已删除reorder_levels
更改列的最终排序reset_index
来自MultiIndex
drop
rename
第一栏df = (df.set_index(['time','id'])
.stack()
.reorder_levels([2,0,1])
.reset_index(name='a')
.drop('a', 1)
.rename(columns={'level_0':'type'}))
print (df)
type time id
0 A 4.42 1
1 A 4.48 3
2 A 5.45 2
3 B 6.64 2
4 B 7.49 1
5 B 7.72 3
6 C 8.13 1
7 C 8.65 2
8 C 9.07 3