首页 > 解决方案 > 有条件地更改熊猫中的数据框索引

问题描述

我有一个多索引 panadas 数据框,如下所示。这只是我遇到的问题的一个例子。实际上,此数据框可能非常大,并且包含许多出现此问题的情况。

第一行index2的值为 ,2最后一行index1的值为2。这不应该是这样。结果,我需要将index1最后一行的更改为,1以便所有行都属于index1 1.

                 given_name
 index1   index2    
 664627    766206         1
          1297240         1
          1429530         1
 569874    396418         1
 766206   1429531         1
 169874   3697813         1
 123456   1598742         1
 1598742  19543864        1

所需的输出应如下所示:

                 given_name
 index1   index2    
 664627    766206         1
          1297240         1
          1429530         1
          1429531         1
 569874    396418         1
 169874   3697813         1
 123456   1598742         1
         19543864         1

理想情况下,解决方案应该是矢量化且快速的。我不必使用索引。数据框可以将reset_index()它们用作列并作为列工作,然后将列重置为索引。

标签: pythonpandas

解决方案


我相信需要get_level_values第一级MultiIndex,将其转换为Seriesby ,以便通过由with创建的前向填充to_series替换s ,最后:NaNmaskisinset_index

idx1 = df.index.get_level_values(0).to_series()
idx2 = df.index.get_level_values(1)
idx = idx1.mask(idx1.isin(idx2)).ffill().astype(int)

df = df.set_index([idx, idx2])
print (df)
               given_name
index1 index2            
1      2              1.0
       3              0.0
       4              1.0
       5              0.5
6      7              1.0
       8              1.0
       9              0.0

推荐阅读