熊猫:更改一个特定列的多级列名称

时间:2019-03-04 15:05:51

标签: python pandas

我有一个这样的数据框:

type      A                           B
kind      A1                          B1
name      alpha  aplpha1  alpha_dog   beta beta1 alpha_dog
timestamp
20180101  1      2        3           4     5    6
20180102  ...
20180103  ...

我想更改kind列中的alpha_dog,因此我可以进行以下操作:

type      A                           B
kind      A1              google      B1         google
name      alpha  aplpha1  alpha_dog   beta beta1 alpha_dog
timestamp
20180101  1      2        3           4     5    6
20180102  ...
20180103  ...

我查看了df.rename/multiindex.rename,但它们都不适合这种情况,我发现执行此操作真的很困难,您对此有何看法?我可以采取一个简单的选择吗?

1 个答案:

答案 0 :(得分:2)

MultiIndex的值是不可变的元组,这可能就是为什么仅更改单个级别值如此困难的原因。而是创建新的元组,然后再次分配MultIndex。

df.columns = pd.MultiIndex.from_tuples(
        [(x, 'google', z) if z == 'alpha_dog' else (x,y,z) for x,y,z in df.columns], 
        names=df.columns.names)

type     A                      B                 
kind    A1           google    B1           google
name alpha alpha1 alpha_dog alpha alpha1 alpha_dog
0        1      1         1     1      1         1
1        1      1         1     1      1         1
2        1      1         1     1      1         1

样本数据

import pandas as pd

df = pd.DataFrame([[1]*6]*3)
df.columns = pd.MultiIndex.from_tuples(
    tuple((x,y,z) for x,y in zip(['A', 'B'], ['A1', 'B1']) for z in ['alpha', 'alpha1', 'alpha_dog']),
    names=['type', 'kind', 'name'])