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'])