熊猫数据框重新排列堆栈到两个值列(用于因子图)
Posted
技术标签:
【中文标题】熊猫数据框重新排列堆栈到两个值列(用于因子图)【英文标题】:Pandas dataframe rearrangement stack to two value columns (for factorplots) 【发布时间】:2017-02-16 12:01:18 【问题描述】:我一直在尝试重新排列我的数据框以将其用作因子图的输入。原始数据如下所示:
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")
但是这只会产生一个值列而不是两个.. 感谢您的支持
【问题讨论】:
您想对这些值执行cumsum
,然后根据您想要的DF
重新调整它,或者只是在不执行cumsum
操作的情况下重新调整这些值,因为您已经得到了后一种情况?
【参考方案1】:
我会用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')
【讨论】:
比我的答案好几个数量级 @piRsquared 感谢您的来信!【参考方案2】:考虑你的数据框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'))
解决方案
df.set_index('D', append=True) \
.rename_axis(['col'], 1) \
.rename_axis([None, 'val2']) \
.stack().to_frame('val') \
.reset_index(['col', 'val2']) \
[['col', 'val', 'val2']]
【讨论】:
以上是关于熊猫数据框重新排列堆栈到两个值列(用于因子图)的主要内容,如果未能解决你的问题,请参考以下文章