python - 使用 pandas 有条件地删除重复项

我有一个看起来像这样的 pandas 数据框:

header1 header2 header3
val1 1 True
val2 2 True
val1 1 True
val2 2 False

我想根据最后一列是否为 True 有条件地对行进行重复数据删除。

在上面的 table 中,我希望 drop 后的输出数据帧如下所示:

header1 header2 header3
val1 1 True
val2 2 True
val2 2 False

对第三行进行了重复数据删除,因为它的标题 3 设置为 true,但没有第四行,因为它的标题 3 设置为 false。

我还没有弄清楚如何做到这一点,因为 drop_duplicates 不明确支持这一点,并且遍历整个数据框通常不是一个好习惯(尽管如果必须的话我会这样做)。

回答1

假设如果标题为 False,您想保留所有重复的行,这应该有效

# flag the row if header3 is not False or duplicated
df = df[~df['header3'] | ~df.drop(columns='header3').duplicated()]
print(df)
  header1  header2  header3
0    val1        1     True
1    val2        2     True
3    val2        2    False

回答2

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop_duplicates.htmlhttps://pandas.pydata.org/docs/reference/api/pandas.concat.html 一起使用:

In [606]: ix = df[df['header3']].drop_duplicates().index
In [610]: df = pd.concat([df.loc[ix], df[~df['header3']]])

In [611]: df
Out[611]: 
  header1  header2  header3
0    val1        1     True
1    val2        2     True
3    val2        2    False

相似文章

最新文章