python - Pandas 按名称将几组列融化成多个目标列

标签 python pandas melt

我想将数据框的几组列融合到多个目标列中。类似问题Python Pandas Melt Groups of Initial Columns Into Multiple Target Columnspandas dataframe reshaping/stacking of multiple value variables into seperate columns .但是我需要通过列名而不是索引位置明确地执行此操作。

import pandas as pd
df = pd.DataFrame([('a','b','c',1,2,3,'aa','bb','cc'), ('d', 'e', 'f', 4, 5, 6, 'dd', 'ee', 'ff')],
                  columns=['a_1', 'a_2', 'a_3','b_1', 'b_2', 'b_3','c_1', 'c_2', 'c_3'])
df

原始数据框:

    id   a_1  a_2  a_3  b_1  b_2  b_3  c_1  c_2  c_3
0   101   a    b    c    1    2    3    aa   bb   cc
1   102   d    e    f    4    5    6    dd   ee   ff

目标数据框

     id   a   b   c
0   101   a   1   aa
1   101   b   2   bb
2   101   c   3   cc
3   102   d   4   dd
4   102   e   5   ee
5   102   f   6   ff

非常感谢有关此方法的建议。

最佳答案

有一种更有效的方法可以解决这类涉及熔化多组不同色谱柱的问题。 pd.wide_to_long 正是为这些情况而构建的。

pd.wide_to_long(df, stubnames=['a', 'b', 'c'], i='id', j='dropme', sep='_')\
  .reset_index()\
  .drop('dropme', axis=1)\
  .sort_values('id')

    id  a  b   c
0  101  a  1  aa
2  101  b  2  bb
4  101  c  3  cc
1  102  d  4  dd
3  102  e  5  ee
5  102  f  6  ff

关于python - Pandas 按名称将几组列融化成多个目标列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38862832/

相关文章:

python - 如何通过鼠标点击而不是猜测和检查来获取 ROI 边界框坐标

python - 将字符串列转换为日期时间格式

python - PySpark Dataframe 将列融为行

python - Pandas Dataframe - 如何将两列值堆叠到一个列表中?

python - Celery 动态任务/将 Celery 实现隐藏在接口(interface)后面

python - Django 外键查询

python - 在 Pandas 中组合奇数和偶数索引行

r - 最后一个下划线后分隔字符串

python - 在 Python 列表中压缩列表

python - 如何去掉 Pandas 群的中间部分,只保留头部和尾部?