Dataframe:将具有相同列名的单独子列组合在一起

Dataframe : Group separate subcolumns with identical column names together

我已经设法制定了一个数据框,其中包含约 200 列,每列都有一个子列。现在经过一些计算,一组单独的值已存储在具有相同列名的同一数据框中。因此,它们以不同的子列名称存储。 我的问题是如何将这两组(列,子列)对组合在一起。

以下是类似表示的较小子集(我有):

          Date    Column1     Column2   Column3      Column1     Column2   Column3
                      Num         Num       Num       ProdID      ProdID    ProdID
0   2015-01-02        100         106       111           AA          AA        AD
1   2015-01-02        105         118       109           AB          AA        AB
2   2015-01-02        102         173       188           AC          AC        AC
3   2015-01-02        112         101       105           AD          AB        AE
4   2015-01-02        139         191       156           AE          AE        AC
5   2015-01-02        126         172       117           AF          AE        AF

以下是我想要的:

          Date              Column1              Column2                Column3      
                      Num    ProdID       Num     ProdID         Num     ProdID      
0   2015-01-02        100        AA       106         AA         111         AD
1   2015-01-02        105        AB       118         AA         109         AB
2   2015-01-02        102        AC       173         AC         188         AC
3   2015-01-02        112        AD       101         AB         105         AE
4   2015-01-02        139        AE       191         AE         156         AC
5   2015-01-02        126        AF       172         AE         117         AF

我试过像

这样的基本groupby语句
df = df.groupby(df.columns, axis=1)

但这不起作用。我认为这很简单,但无法弄清楚

我们可以试试 reindex:

df = df.reindex(columns=[df.columns[0], *sorted(df.columns[1:])])

df.columns[0]Date,应该 排序。然后其余的列得到 sorted df.columns[1:].


示例数据

import numpy as np
import pandas as pd

rows = 3
df = pd.DataFrame(
    np.arange(1, (rows * 5) + 1).reshape(-1, 5),
    columns=pd.MultiIndex.from_arrays([
        ['Date', 'Column1', 'Column2', 'Column1', 'Column2'],
        ['', 'Num', 'Num', 'ProdID', 'ProdID']
    ])
)
df.iloc[:, 0] = pd.date_range(start='2021-01-01', periods=len(df), freq='D')

之前:

        Date Column1 Column2 Column1 Column2
                 Num     Num  ProdID  ProdID
0 2021-01-01       2       3       4       5
1 2021-01-02       7       8       9      10
2 2021-01-03      12      13      14      15

reindex之后:

        Date Column1        Column2       
                 Num ProdID     Num ProdID
0 2021-01-01       2      4       3      5
1 2021-01-02       7      9       8     10
2 2021-01-03      12     14      13     15