熊猫丢弃重复的行,包括索引


我知道如何根据列数据删除重复的行。我还知道如何根据行索引删除重复行。我的问题是:有没有一种方法可以根据索引和一列删除重复的行?

谢谢!

这可以通过将索引变成一列来实现。

以下是一个样本数据集(我想有人否决了你的问题,因为它不包括样本数据集(:

df=pd.DataFrame({'a':[1,2,2,3,4,4,5], 'b':[2,2,2,3,4,5,5]}, index=[0,1,1,2,3,5,5])

输出:

a  b
0  1  2
1  2  2
1  2  2
2  3  3
3  4  4
5  4  5
5  5  5

然后您可以使用以下行。第一个reset_index((使用索引号创建一个新列。然后,您可以根据新索引列和另一列(本例中为b(删除重复项。之后,您可以使用set_index('index'(将索引设置为原始索引值:

df.reset_index().drop_duplicates(subset=['index','b']).set_index('index')

输出:

a  b
index      
0      1  2
1      2  2
2      3  3
3      4  4
5      4  5

如果你不想像JJ101的答案那样重置然后重新设置索引,你可以使用Panda的.duplicated()方法而不是.drop_duplicates()

如果您关心索引和某些列b中的重复项,则可以分别用df.index.duplicated()df.duplicated(subset="b")标识相应的索引。使用&运算符将它们组合起来,然后使用~否定该交集,得到类似的结果

clean_df = df[~(df.index.duplicated() & df.duplicated(subset="b"))]
print(clean_df)

输出:

a  b
0  1  2
1  2  2
2  3  3
3  4  4
5  4  5