如何在多索引 pandas 数据框中填充列名称

问题描述 投票:0回答:2

我的数据框列如下所示:

>> df.columns

output:

MultiIndex([(                    'Month',                      nan),
        (                           'TG',                      nan),
        (                        'Reach',                  'level'),
        (                            nan,                   'plan'),
        (                            nan,             'sth (p.p.)'),
        (                            nan,                  'final'),
        (                   'Prime Time',                  'final'),
        (                            nan,                    'AGB'),
        (                            nan,            'diff (p.p.)'),
        (                   'Prime Time',             'diff p.p.')],
       names=[None, 'Campaign'])

我想填写这样的名字:

MultiIndex([(                    'Month',                      nan),
        (                           'TG',                      nan),
        (                        'Reach',                  'level'),
        (                        'Reach',                   'plan'),
        (                        'Reach',             'sth (p.p.)'),
        (                        'Reach',                  'final'),
        (                   'Prime Time',                  'final'),
        (                   'Prime Time',                    'AGB'),
        (                   'Prime Time',            'diff (p.p.)'),
        (                   'Prime Time',             'diff p.p.')],
       names=[None, 'Campaign'])

最后我想得到一个带有一个名称行的扁平数据框:

'Month',
'TG',
'Reach level',
'Reach plan',
...
pandas
2个回答
0
投票

使用

MultiIndex.to_frame
作为 DataFrame,使用
DataFrame.ffill
来前向填充缺失值,最后通过
MultiIndex
 转换回 
MultiIndex.from_frame
:

nan = np.nan
L = [('Month', nan), ('TG', nan), ('Reach', 'level'), (nan, 'plan'),
      (nan, 'sth (p.p.)'), (nan, 'final'), ('Prime Time', 'final'), (nan, 'AGB'), (nan, 'diff (p.p.)'), ('Prime Time', 'diff p.p.')]

df = pd.DataFrame(columns=pd.MultiIndex.from_tuples(L))

df.columns = pd.MultiIndex.from_frame(df.columns.to_frame().ffill())


print (df.columns)
MultiIndex([(     'Month',           nan),
            (        'TG',           nan),
            (     'Reach',       'level'),
            (     'Reach',        'plan'),
            (     'Reach',  'sth (p.p.)'),
            (     'Reach',       'final'),
            ('Prime Time',       'final'),
            ('Prime Time',         'AGB'),
            ('Prime Time', 'diff (p.p.)'),
            ('Prime Time',   'diff p.p.')],
           names=[0, 1])

0
投票

您可以使用

pandas.MultiIndex.to_frame
pandas.MultiIndex.from_frame
:

df.columns = pd.MultiIndex.from_frame(df.columns.to_frame().ffill(),
                                      names=df.columns.names)

输出示例:

         Month  TG Reach                       Prime Time                          
Campaign   NaN NaN level plan sth (p.p.) final      final AGB diff (p.p.) diff p.p.
0                                                                                                                                                          
© www.soinside.com 2019 - 2024. All rights reserved.