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

Python 熊猫:更改一个特定列的多级列名,python,pandas,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 ... 我想更改alpha

我有这样一个数据帧:

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  ...
我想更改
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
,但它们都不适用于这种情况,我发现执行此操作非常困难,您的看法如何?我可以选择一个简单的选项吗?

多索引的值是元组,它们是不可变的,这可能就是为什么只更改一个级别的值非常困难的原因。相反,创建新元组,然后再次分配多重索引

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
样本数据
这看起来像是将新标签(值
google
)插入
kind
索引级别,而实际上没有重命名任何现有标签,对吧?我想不会吧?对于第一个df,alpha_go分别有'A1'和'B1'类@peterleimbigler这里的事情是,对于熊猫,如果你对索引进行排序,那么你不会看到重复的索引值,但它们实际上在那里@PeterLeimbiglerOk,我想我现在明白了:对于
name='alpha_dog'
,您想将其
'kind'
-级别的标签重命名为
google
,对吗?yep@PeterLeimbiglerNice解决方案+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'])