如何将同名的 header 合并为一个 header?

How to merge headers with same name into one single header?

我要将 MultiIndex 列添加到我的数据框中。 我得到了什么:

我想得到什么:

完整代码:

import pandas as pd
data = pd.DataFrame(columns=[1, 2, 3, 4, 5])

dictionary = {1: 'row1', 2: 'row2', 3: 'row2', 4: 'row2', 5: 'row3'}

dictionary1 = {1: 'row4', 2: 'row5', 3: 'row6', 4: 'row7', 5: 'row3'}
dictionary2 = {1: 5, 2: 4, 3: 3, 4: 2, 5: 1}

data = data.append(dictionary, ignore_index=True)
data = data.append(dictionary1, ignore_index=True)
data = data.append(dictionary2, ignore_index=True)
data = data.append(dictionary2, ignore_index=True)
data = data.append(dictionary2, ignore_index=True)

我做了什么:

arrays = [['row1', 'row2', 'row2', 'row2', 'row3'],
          ['row4', 'row5', 'row6', 'row7', 'row3']]
data.columns = pd.MultiIndex.from_arrays(arrays)

data

首先,请注意,如果您要处理数据,隐藏标签可能不是一个好主意。这将阻止您按逻辑选择数据。

就是说,如果你真的想这样做,你可以将 MultiIndex 转换为 DataFrame 并使用 duplicatedmask 重复的标签:

idx = data.columns.to_frame()
data.columns = pd.MultiIndex.from_frame(idx.mask(idx.apply(pd.Series.duplicated,
                                                           axis=1)
                                                 ).fillna(''),
                                        names=[None]*data.columns.nlevels)

输出:

   row1  row2              row3
   row4  row5  row6  row7      
0  row1  row2  row2  row2  row3
1  row4  row5  row6  row7  row3
2     5     4     3     2     1
3     5     4     3     2     1
4     5     4     3     2     1