我有一个这样的数据框:
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
,但它们都不适合这种情况,我发现执行此操作真的很困难,您对此有何看法?我可以采取一个简单的选择吗?
答案 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'])