Python 将数据帧重排堆栈复制到两个值列(对于FactoryPlot)
我一直在尝试重新排列我的数据帧,以将其用作FactoryPlot的输入。原始数据如下所示:Python 将数据帧重排堆栈复制到两个值列(对于FactoryPlot),python,pandas,stack,cumsum,Python,Pandas,Stack,Cumsum,我一直在尝试重新排列我的数据帧,以将其用作FactoryPlot的输入。原始数据如下所示: 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_in
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")
但是,这只生成一个值列,而不是两个。。感谢您的支持考虑您的数据帧
df
df = pd.DataFrame([
[0, 1, 2, 'T'],
[1, 2, 3, 'F'],
[2, 1, 3, 'F'],
[1, 0, 2, 'T'],
], [1, 2, 3, 4], list('ABCD'))
解决方案
我会使用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'})
数量级比我的answer@piRsquared感谢你的邀请!您想对值执行
cumsum
,然后根据所需的DF
对其进行整形,还是只需在不执行cumsum
操作的情况下对值进行整形,因为您已经得到了后一种情况的答案?
df.set_index('index').rename(columns={'D': 'col', 'variable': 'val2', 'value': 'val'})