我一直在尝试重新排列我的数据框以将其用作因子图的输入。原始数据如下所示:
A B C D
1 0 1 2 "T"
2 1 2 3 "F"
3 2 1 0 "F"
4 1 0 2 "T"
...
我的问题是如何将它重新排列成这种形式:
col val val2
1 A 0 "T"
1 B 1 "T"
1 C 2 "T"
2 A 1 "F"
...
我在尝试:
df = DF.cumsum(axis=0).stack().reset_index(name="val")
但是这只会产生一个值列而不是两个..感谢您的支持
最佳答案
我会用 melt,你可以随意排序
pd.melt(df.reset_index(),id_vars=['index','D'], value_vars=['A','B','C']).sort_values(by='index')
Out[40]:
index D variable value
0 1 T A 0
4 1 T B 1
8 1 T C 2
1 2 F A 1
5 2 F B 2
9 2 F C 3
2 3 F A 2
6 3 F B 1
10 3 F C 0
3 4 T A 1
7 4 T B 0
11 4 T C 2
那么显然你可以随意命名列
df.set_index('index').rename(columns={'D': 'col', 'variable': 'val2', 'value': 'val'})
关于python - Pandas 数据框重排堆栈到两个值列(用于因子图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39918053/