基于列名前缀的 Pandas 数据透视列

标签 pandas dataframe pivot-table pandas-melt

我有一个数据框:

df = AG_Speed AG_wolt AB_Speed AB_wolt C1 C2 C3
       1         2      3         4     6  7  8
       1         9      2         6     4  1  8

我想根据前缀对它进行透视以获得:

df = Speed Wolt C1 C2 C3 Category
      1      2   6 7  8    AG
      3      4   6 7  8    AB
      1      9   4 1  8    AG
      2      6   4 1  8    AG 

最好的方法是什么?

最佳答案

我们可以使用pd.wide_to_long为了这。但是因为它希望列名以 stub 名称开头​​,所以我们必须反转列格式:

df.columns = ["_".join(col.split("_")[::-1]) for col in df.columns]
res = pd.wide_to_long(
    df, 
    stubnames=["Speed", "wolt"], 
    i=["C1", "C2", "C3"], 
    j="Category", 
    sep="_", 
    suffix="[A-Za-z]+"
).reset_index()
   C1  C2  C3 Category  Speed  wolt
0   6   7   8       AG      1     2
1   6   7   8       AB      3     4
2   4   1   8       AG      1     9
3   4   1   8       AB      2     6

如果您希望列按特定顺序排列,请使用 DataFrame.reindex:

res.reindex(columns=["Speed", "wolt", "C1", "C2", "C3", "Category"])
   Speed  wolt  C1  C2  C3 Category
0      1     2   6   7   8       AG
1      3     4   6   7   8       AB
2      1     9   4   1   8       AG
3      2     6   4   1   8       AB

关于基于列名前缀的 Pandas 数据透视列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73278757/

相关文章:

r - 计算 R 中矩阵每一列的平均值

python - 取消列出数据框 pandas 中的字典列表

python - 使用 aggfunc 时出现 pandas InvalidIndexError

python - 使用 Python ORM 的交叉制表(列联表)?

python - 如何找到pandas数据框中连续值的最后一个值?

pandas - 合并/合并具有不同索引和不同列名的数据帧

python - 将 pandas 数据帧转换为 NumPy 数组

python - 对列进行排序并过滤最佳结果,按多索引级别 0(系列/数据帧)分组

r - 将列表转换为 R 中的数据框并添加带有子列表名称的列

mysql - 具有动态列的单表 MySQL Pivot