python - Pandas - 将列拆分为行,同时保留索引

标签 python pandas

我有以下简化的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/

相关文章:

python - Column DataFrame Python 中的计算器数组

python - 使用 pypyodbc 和 pandas 加载 1GB .accdb 时出现内存错误

python - 拆分 pandas 日期时间索引以创建分类变量

python - Pandas:使用 if 语句更新列

python - 'input' 是 print() 的无效关键字参数

python - 使用 iloc 为 pandas DataFrame 中的特定单元格设置值

python-3.x - 考虑到 pandas 系列中的不同索引,如何正确估计两列的百分比变化? Python相关

python - 生成过滤的二元笛卡尔积

python - 如何在DataFrame中将日期转换为Year.Q格式

python - Pyramid :获取应用程序绝对 url