簡體   English   中英

使用 pandas 有條件地刪除重復項

[英]Conditionally dropping duplicates using pandas

我有一個看起來像這樣的熊貓數據框:

標題1 標頭2 標題3
val1 1 真的
val2 2 真的
val1 1 真的
val2 2 錯誤的

我想根據最后一列是否為True ,有條件地對行進行重復數據刪除。

在上表中,我希望 drop 后的輸出數據幀如下所示:

標題1 標頭2 標題3
val1 1 真的
val2 2 真的
val2 2 錯誤的

對第三行進行了重復數據刪除,因為它的標題 3 設置為 true,但沒有第四行,因為它的標題 3 設置為 false。

我還沒有弄清楚如何做到這一點,因為drop_duplicates不明確支持這一點,並且遍歷整個數據幀通常不是一個好習慣(盡管如果必須的話我會這樣做)。

假設如果標題為 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

df.drop_duplicatespd.concat一起使用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM