python - 多索引 : Level values must be unique 上的 Pandas set_levels

标签 python pandas dataframe indexing multi-index

给定一个数据帧 df

                    Value
Category Pool Class      
A        1.0  1.0       1
              9.0       2
B        1.0  1.0       3
C        1.0  1.0       4
              5.0       5

我想转换级别 PoolClass到没有 reset_index 的整数(见下文)。

我尝试使用 get_level_values 的组合和 set_levels像这样
for c in ['Pool', 'Class']:
    df.index.set_levels(df.index.get_level_values(c).astype(int), level=c, inplace=True)

然而,这引发了
ValueError: Level values must be unique: [1, 1, 1, 1, 1] on level 1

为了了解会发生什么,我还尝试使用 verify_integrity=False .然后
df.index.set_levels(df.index.get_level_values('Class').astype(int),
                    level='Class', verify_integrity=False, inplace=True)

产生
                    Value
Category Pool Class      
A        1.0  1         1
              1         2
B        1.0  1         3
C        1.0  1         4
              9         5

而我的目标是获得
                    Value
Category Pool Class      
A        1.0  1         1
              9         2
B        1.0  1         3
C        1.0  1         4
              5         5

如何正确实现这一目标?正在链接 get_level_valuesset_levels正确的做法是什么?为什么是 pandas使用 astype 转换后无法正确设置级别?

我想你可以和 reset_index 一起工作和 set_index但是拥有这些方法有什么好处set_levels ?
d = {'Category': str, 'Pool': int, 'Class': int}
df.reset_index(drop=False, inplace=True)
for k, v in d.items():
    df[k] = df[k].astype(v)

df.set_index(list(d.keys()), inplace=True)

最佳答案

您可以通过 pd.MultiIndex.levels 直接访问索引级别并提供给 pd.MultiIndex.set_levels :

df.index = df.index.set_levels(df.index.levels[2].astype(int), level=2)

print(df)

                     Value
Category Pool Class       
A        1.0  1          1
              9          2
B        1.0  1          3
C        1.0  1          4
              5          5

关于python - 多索引 : Level values must be unique 上的 Pandas set_levels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52933724/

相关文章:

python - 使用 Pandas 将 JSON 转换为多个 DataFrame

Python从多列中获取值计数并从另一列中取平均值

python - 如何根据pandas数据框中变量的变化删除行

c++ - 调试 C++ 程序时 GDB cv::Mat python 对象问题

Python 从多个文件写入会覆盖以前的内容

python - 如何启用 reCAPTCHA

python - 比 loc 更有效的清理数据帧的方法

python - Groupby 多索引 AND 获取第一个索引的总和

python - 基于增长率优化值的迭代计算

python - 伏特龙 : Device communication aborted: segmentationNotSupported