gpt4 book ai didi

python - 在 MultiIndex 中设置级别值

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

如何设置系列的级别值,是使用字​​典替换值,还是仅使用与系列一样长的值列表?

这是一个示例 DataFrame:

     sector from_country to_country           0
0 Textiles FRA AUS 47.502096
1 Textiles FRA USA 431.890710
2 Textiles GBR AUS 83.500590
3 Textiles GBR USA 324.836158
4 Wood FRA AUS 27.515607
5 Wood FRA USA 276.501148
6 Wood GBR AUS 1.406096
7 Wood GBR USA 8.996177

现在设置索引:

df = df.set_index(['sector', 'from_country', 'to_country']).squeeze()

例如,如果我想根据以下键/值对进行更改:

In [69]: replace_dict = {'FRA':'France', 'GBR':'UK'}
In [70]: new_vals = [replace_dict[x] for x in df.index.get_level_values('from_country')]

我希望输出看起来像:

In [68]: df.index.set_level_values(new_vals, level='from_country')
Out[68]:
sector from_country to_country
Textiles France AUS 47.502096
USA 431.890710
UK AUS 83.500590
USA 324.836158
Wood France AUS 27.515607
USA 276.501148
UK AUS 1.406096
USA 8.996177

我目前正在这样做,但对我来说这似乎很愚蠢:

def set_index_values(df_or_series, new_values, level):
"""
Replace the MultiIndex level `level` with `new_values`

`new_values` must be the same length as `df_or_series`
"""
levels = df_or_series.index.names
retval = df_or_series.reset_index(level)
retval[level] = new_values
retval = retval.set_index(level, append=True).reorder_levels(levels).sortlevel().squeeze()
return retval

最佳答案

有点hacky,但你可以用.index.set_levels来做到这一点:

In [11]: df1.index.levels[1]
Out[11]: Index(['FRA', 'GBR'], dtype='object', name='from_country')

In [12]: df1.index.levels[1].map(replace_dict.get)
Out[12]: array(['France', 'UK'], dtype=object)

In [13]: df1.index = df1.index.set_levels(df1.index.levels[1].map(replace_dict.get), "from_country")

In [14]: df1
Out[14]:
sector from_country to_country
Textiles France AUS 47.502096
USA 431.890710
UK AUS 83.500590
USA 324.836158
Wood France AUS 27.515607
USA 276.501148
UK AUS 1.406096
USA 8.996177
Name: 0, dtype: float64

注意:一种从名称中获取级别编号的方法,但我不记得了。

关于python - 在 MultiIndex 中设置级别值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32892751/

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