从层次索引熊猫的级别中删除重复项

时间:2018-07-17 09:26:22

标签: python pandas

我想根据第二个索引对以下分层索引的数据帧进行重复数据删除。我还没有找到一种方法来做到这一点。有pandas.Multiindex.drop_duplicates(),但是不允许您指定级别。

示例数据框是:

In [5]: df
Out[5]:
               given_name  surname  dob  phone_number_1_clean 
985    2414           1.0      1.0  0.0                   1.0
       122864         1.0      1.0  0.0                   0.0
       167863         1.0      1.0  0.0                   0.0
       418911         1.0      1.0  0.0                   0.0
       516362         1.0      1.0  0.0                   0.0
2414   122864         1.0      1.0  0.0                   0.0
       167863         1.0      1.0  1.0                   0.0
       418911         1.0      1.0  1.0                   0.0
       516362         1.0      1.0  0.0                   0.0
122864 167863         1.0      1.0  0.0                   1.0
       418911         1.0      1.0  0.0                   1.0
       516362         1.0      1.0  0.0                   1.0
167863 418911         1.0      1.0  1.0                   1.0
       516362         1.0      1.0  0.0                   1.0
418911 516362         1.0      1.0  0.0                   1.0

输出应为:

               given_name  surname  dob  phone_number_1_clean 
985    2414           1.0      1.0  0.0                   1.0
       122864         1.0      1.0  0.0                   0.0
       167863         1.0      1.0  0.0                   0.0
       418911         1.0      1.0  0.0                   0.0
       516362         1.0      1.0  0.0                   0.0

1 个答案:

答案 0 :(得分:4)

get_level_values用于选择MultiIndex的第二级,将duplicated用于布尔掩码,求反并用boolean indexing进行过滤:

df = df[~df.index.get_level_values(1).duplicated()]
print (df)
            given_name  surname  dob  phone_number_1_clean
985 2414           1.0      1.0  0.0                   1.0
    122864         1.0      1.0  0.0                   0.0
    167863         1.0      1.0  0.0                   0.0
    418911         1.0      1.0  0.0                   0.0
    516362         1.0      1.0  0.0                   0.0

详细信息

print (df.index.get_level_values(1))
Int64Index([  2414, 122864, 167863, 418911, 516362, 122864, 167863, 418911,
            516362, 167863, 418911, 516362, 418911, 516362, 516362],
           dtype='int64')

print (df.index.get_level_values(1).duplicated())
[False False False False False  True  True  True  True  True  True  True
  True  True  True]

print (~df.index.get_level_values(1).duplicated())
[ True  True  True  True  True False False False False False False False
 False False False]