我想根据第二个索引对以下分层索引的数据帧进行重复数据删除。我还没有找到一种方法来做到这一点。有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
答案 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]