python - 使用另一列内的列名称 reshape 数据框

标签 python pandas dataframe

我有一个结构相当不直观的数据框:

device1    device2    column_name
      1          1    date
    111        211    param1
    112        212    param2
      2          2    date
    121        221    param1
    122        222    param2
      3          3    date
    131        231    param1
    132        232    param2

我很难尝试将其转换为所需的数据帧:

           date    param1    param2
device1       1       111       112
              2       121       122
              3       131       132
device2       1       211       212
              2       221       222
              3       231       232

使用pivotstack/unstack让我更接近目标,但从未达到目标。

我怎样才能做到这一点?

最佳答案

您可以堆叠数据帧进行 reshape ,然后使用groupby + cumcount创建顺序计数器来识别不同的行,最后使用 set_index 创建多级索引并使用 unstack reshape :

d = df.set_index('column_name').stack()
i = d.groupby(level=[0, 1]).cumcount()
out = d.to_frame().set_index(i, append=True)[0].unstack(0).droplevel(1)

print(out)

column_name  date  param1  param2
device1         1     111     112
device1         2     121     122
device1         3     131     132
device2         1     211     212
device2         2     221     222
device2         3     231     232

关于python - 使用另一列内的列名称 reshape 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65159436/

相关文章:

python - 在python中组合由一个系列分隔的两个文本

java - OpenCV - 在视频和图像上查找黑板边缘

python - 在 while 循环中使用生成器并在每次生成后进行评估

python - 在列表列表中查找最长递增子序列的最有效方法

python - 如何获取 date_range 并将它们作为 'list' 插入到数据框中的新列?

python - 在子字符串上熔化和合并 - Python 和 Pandas

python - Django 国际化不起作用(makemessages 找不到 .py 文件)

python - 读取DataFrame的列失败

python - 根据组过滤 DataFrame 行

python - Pandas 检索一列中的值对应于另一列中的最大值