簡體   English   中英

在 Pandas dataframe 上使用 `drop_duplicates` 不會刪除行

[英]Using `drop_duplicates` on a Pandas dataframe isn't dropping rows

情況

我有類似於下面的 dataframe(盡管我已經刪除了這個例子中的許多行,如“索引”列所示):

df

指數 ID 名稱 最近更新時間
0 1518 制作者 2022-12-31T03:02:00.000Z
1個 1518 制作者 2022-12-31T02:02:00.000Z
2個 1518 制作者 2022-12-31T14:02:00.000Z
3個 1518 制作者 2022-12-31T16:02:00.000Z
23 1518 制作者 2022-12-31T17:02:00.000Z
24 2280 文件幣 2022-12-31T01:02:00.000Z
25 2280 文件幣 2022-12-31T03:01:00.000Z
26 2280 文件幣 2022-12-31T02:01:00.000Z
27 2280 文件幣 2022-12-31T00:02:00.000Z
47 2280 文件幣 2022-12-31T08:02:00.000Z
48歲 4558 2022-12-31T01:02:00.000Z
49 4558 2022-12-31T02:01:00.000Z
71 4558 2022-12-31T05:02:00.000Z
72 5026 蘭花 2022-12-31T01:02:00.000Z
73 5026 蘭花 2022-12-31T03:02:00.000Z
74 5026 蘭花 2022-12-31T02:01:00.000Z
75 5026 蘭花 2022-12-31T00:02:00.000Z

我想要上面 dataframe 的一個版本,但每個id參數只有 1 行。 保留最后一例。

這是我的代碼:

df.drop_duplicates(subset=['id'], keep='last')

期待

新的 df 將只保留 4 行,即 dataframe df中每個“id”值的“最后”實例。

結果

運行drop_duplicates命令后, df返回完全相同的 dataframe。與我嘗試drop_duplicates之前的形狀相同。

我一直在嘗試使用這篇文章來解決這個問題,但我發現有些事情我沒有做對:

pandas select 行沒有重復

對於為什么不刪除具有重復“id”值的行的最后一個實例的任何輸入,我將不勝感激。

您應該添加df.drop_duplicates(subset=['id'], keep='last', inplace=True) 如果您不這樣做,則只會返回一份副本。 通過指定 inplace=True,修改 dataframe。

請參閱文檔: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop_duplicates.html

希望這可以幫助!

重新分配變量:

str = """
index   id  name    last_updated
0   1518    Maker   2022-12-31T03:02:00.000Z
1   1518    Maker   2022-12-31T02:02:00.000Z
2   1518    Maker   2022-12-31T14:02:00.000Z
3   1518    Maker   2022-12-31T16:02:00.000Z
23  1518    Maker   2022-12-31T17:02:00.000Z
24  2280    Filecoin    2022-12-31T01:02:00.000Z
25  2280    Filecoin    2022-12-31T03:01:00.000Z
26  2280    Filecoin    2022-12-31T02:01:00.000Z
27  2280    Filecoin    2022-12-31T00:02:00.000Z
47  2280    Filecoin    2022-12-31T08:02:00.000Z
48  4558    Flow    2022-12-31T01:02:00.000Z
49  4558    Flow    2022-12-31T02:01:00.000Z
71  4558    Flow    2022-12-31T05:02:00.000Z
72  5026    Orchid  2022-12-31T01:02:00.000Z
73  5026    Orchid  2022-12-31T03:02:00.000Z
74  5026    Orchid  2022-12-31T02:01:00.000Z
75  5026    Orchid  2022-12-31T00:02:00.000Z
"""

csvStringIO = StringIO(str)
df = pd.read_csv(csvStringIO, sep="\t")
df = df.drop_duplicates(subset=['id'], keep='last')
print(df) # 4 rows

或者inplace設置為True

df.drop_duplicates(subset=['id'], keep='last', inplace=True)
print(df) # 4 rows

暫無
暫無

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

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