我有以下简化的DataFrame
:
import pandas as pd
pd.DataFrame([{'index_a':'a1', 'index_b':'b1', 'value_x':'x1', 'value_y':'y1'},
{'index_a':'a2', 'index_b':'b2', 'value_x':'x2', 'value_y':'y2'},
{'index_a':'a3', 'index_b':'b3', 'value_x':'x3', 'value_y':'y3'}])
它包含两个索引和两个值列。对于下游使用,拥有两个值列是没有意义的(它们来自相同的分布)。因此,我想“分解”这些列并制作一个大列表。这应该是结果:
pd.DataFrame([{'index_a':'a1', 'index_b':'b1', 'value':'x1'},
{'index_a':'a1', 'index_b':'b1', 'value':'x1'},
{'index_a':'a2', 'index_b':'b2', 'value':'x2'},
{'index_a':'a2', 'index_b':'b2', 'value':'y2'},
{'index_a':'a3', 'index_b':'b3', 'value':'x3'},
{'index_a':'a3', 'index_b':'b3', 'value':'y3'}])
我尝试通过 .value
和 .ravel()
隔离值,但没有产生所需的结果。
提前致谢。烧烤:)
最佳答案
使用str.contains()
作为列名来查找以过滤索引列并将其传递到df.melt()
下作为id_vars
:
final=df.melt(df.columns[df.columns.str.contains('index')]).drop('variable',1)
<小时/>
index_a index_b value
0 a1 b1 x1
1 a2 b2 x2
2 a3 b3 x3
3 a1 b1 y1
4 a2 b2 y2
5 a3 b3 y3
关于python - Pandas - 将列拆分为行,同时保留索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58881442/