[英]Using `drop_duplicates` on a Pandas dataframe isn't dropping rows
[英]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_duplicates
與pd.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.