【问题标题】:collapse a pandas MultiIndex折叠熊猫 MultiIndex
【发布时间】:2016-09-02 09:23:30
【问题描述】:

假设我有一个 DataFrameMultiIndex 列。如何将级别折叠为值的串联,以便我只有一个级别?

设置

np.random.seed([3, 14])
col = pd.MultiIndex.from_product([list('ABC'), list('DE'), list('FG')])
df = pd.DataFrame(np.random.rand(4, 12) * 10, columns=col).astype(int)

print df

   A           B           C         
   D     E     D     E     D     E   
   F  G  F  G  F  G  F  G  F  G  F  G
0  2  1  1  7  5  9  9  2  7  4  0  3
1  3  7  1  1  5  3  1  4  3  5  6  0
2  2  6  9  9  9  5  7  0  1  2  7  5
3  2  2  8  0  3  9  4  7  0  8  2  5

我希望结果如下所示:

   ADF  ADG  AEF  AEG  BDF  BDG  BEF  BEG  CDF  CDG  CEF  CEG
0    2    1    1    7    5    9    9    2    7    4    0    3
1    3    7    1    1    5    3    1    4    3    5    6    0
2    2    6    9    9    9    5    7    0    1    2    7    5
3    2    2    8    0    3    9    4    7    0    8    2    5

【问题讨论】:

    标签: python pandas multi-index


    【解决方案1】:

    解决方案

    我做了这个

    def collapse_columns(df):
        df = df.copy()
        if isinstance(df.columns, pd.MultiIndex):
            df.columns = df.columns.to_series().apply(lambda x: "".join(x))
        return df
    

    我必须检查它是否为MultiIndex,因为如果不是,我将拆分一个字符串并将其与我在join 中选择的任何分隔符重新组合。

    【讨论】:

    • 受到您的解决方案的启发,我想到了这个:df.columns.to_series().str.join('')
    【解决方案2】:

    你可以试试这个:

    In [200]: cols = pd.Series(df.columns.tolist()).apply(pd.Series).sum(axis=1)
    
    In [201]: cols
    Out[201]:
    0     ADF
    1     ADG
    2     AEF
    3     AEG
    4     BDF
    5     BDG
    6     BEF
    7     BEG
    8     CDF
    9     CDG
    10    CEF
    11    CEG
    dtype: object
    

    【讨论】:

      【解决方案3】:
      df.columns = df.columns.to_series().apply(''.join)
      

      这不会产生分隔符,但您可以在 '_' 中替换 '' 或任何其他您可能想要的分隔符。

      【讨论】:

        猜你喜欢
        • 2015-12-01
        • 2013-06-06
        • 2021-12-12
        • 1970-01-01
        • 2021-12-06
        • 2018-06-16
        • 2020-04-20
        • 1970-01-01
        • 2015-09-13
        相关资源
        最近更新 更多