我有一个形状为500 x200的数据框,我想根据列的子集来透视/融合它。下面是一个示例测试数据框,其中我有一个id
列,三个case
列,以及每个id的数据的附加列。
pd.DataFrame({'id': [1,2], 'case1': [3,1], 'case2': [3,2], 'case3': [3,2], 'vpd': [2,1]})
id case1 case2 case3 vpd
0 1 3 3 3 2
1 2 1 2 2 1
我想只在case列上旋转,像这样:
pd.DataFrame({'index': ['case1', 'case2', 'case3', 'case1', 'case2', 'case3'], 'id': [1,1,1,2,2,2], 'vpd': [2,2,2,1,1,1],
'case': [3,3,3,1,2,2]}).set_index('index')
id vpd case
index
case1 1 2 3
case2 1 2 3
case3 1 2 3
case1 2 1 1
case2 2 1 2
case3 2 1 2
其中每个case列成为透视数据框中的一行。这似乎达到了我想要的效果:
pd.wide_to_long(test_df, "case", i="id", j="case#").reset_index()
id case# vpd case
0 1 1 2 3
1 2 1 1 1
2 1 2 2 3
3 2 2 1 2
4 1 3 2 3
5 2 3 1 2
但不完全是。还有什么其他的想法来达到我想要的输出吗?
1条答案
按热度按时间6rqinv9w1#
您可以使用
melt
:要保持顺序,请使用
stack
: