gpt4 book ai didi

python - 索引/MultiIndex 中的字符串替换

转载 作者:太空宇宙 更新时间:2023-11-04 03:29:35 25 4
gpt4 key购买 nike

我有一个MultiIndexed DataFrame,其中包含国家/地区代码,如下所示:

In [3]: idx = pd.MultiIndex.from_tuples([('AUS', 'a'), ('AUS', 'b'), ('BRA', 'a')])

In [4]: idx.names = ['country', 'foo']
In [5]: df = pd.DataFrame([4,5,6], index=idx)
In [6]: df
Out[6]:
0
country foo
AUS a 4
b 5
BRA a 6

我还有一本字典,其中包含可以用以下值替换我的代码的值:

In [7]: codes = dict(AUS='Australia', BRA='Brazil')

我想做与 df.replace(codes) 相同的操作,但在索引级别(所有级别或特定级别,我不介意)

输出看起来像:

               0
country foo
Australia a 4
b 5
Brazil a 6

我目前确实以一种非常愚蠢的方式这样做:

In [21]: replaced = [pd.Series(df.index.get_level_values(i)).replace(codes) for i in range(len(df.index.levels))]
In [22]: replaced_tuples = zip(*replaced)
In [23]: new_idx = pd.MultiIndex.from_tuples(replaced_tuples)
In [27]: df_replaced = pd.DataFrame(df.values, index=new_idx)
In [28]: df_replaced
Out[28]:
0
Australia a 4
b 5
Brazil a 6

当面盯着我看时,有什么更好的方式? (请注意,此方法甚至不保留级别名称,因此它是全面的坏事。)

最佳答案

您可以在多索引上调用 set_levels 并传递新名称,由于字典不能保证顺序,您必须创建一个与级别名称顺序相同的列表:

In [380]:
country_code_list = [codes[x] for x in df.index.get_level_values(0).unique()]
df.index.set_levels(country_code_list, level='country', inplace=True)
df

Out[380]:
0
country foo
Australia a 4
b 5
Brazil a 6

关于python - 索引/MultiIndex 中的字符串替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31612800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com