[英]Removing all non-unique rows from a dataframe
抱歉,這是我的第二篇文章-如果有什么不合理的地方,請告訴我!
我正在嘗試刪除所有重復的行。 我已經嘗試過drop_duplicates()
的keep = False
參數, drop_duplicates()
它只是沒有做正確的事情。
假設我的數據框看起來像這樣
|ORDER ID | ITEM CODE |
123 XXX
123 YYY
123 YYY
456 XXX
456 XXX
456 XXX
789 XXX
000 YYY
我希望它看起來像這樣:
|ORDER ID | ITEM CODE |
123 XXX
789 XXX
000 YYY
所以我建議你使用循環來遍歷每一行,然后在遍歷每一行時使用 if 語句將當前行與最后一行進行比較,如果它被排除,如果它不是返回行。
嘗試使用
df = df.drop_duplicates(subset='ORDER ID')
我設法從其他兩個答案中匯編了答案:
import pandas as pd
lst = [
[123, "XXX"],
[123, "YYY"],
[123, "YYY"],
[456, "XXX"],
[456, "XXX"],
[456, "XXX"],
[789, "XXX"],
[000, "YYY"],
]
df = pd.DataFrame(lst, columns=["ORDER ID", "ITEM CODE"])
to_drop = df[pd.DataFrame(df.sort_values(by=["ORDER ID", "ITEM CODE"]), index=df.index).duplicated()]
to_drop
刪除所有行所以整個代碼看起來像:
import pandas as pd
lst = [
[123, "XXX"],
[123, "YYY"],
[123, "YYY"],
[456, "XXX"],
[456, "XXX"],
[456, "XXX"],
[789, "XXX"],
[000, "YYY"],
]
df = pd.DataFrame(lst, columns=["ORDER ID", "ITEM CODE"])
to_drop = df[pd.DataFrame(df.sort_values(by=["ORDER ID", "ITEM CODE"]), index=df.index).duplicated()]
print(pd.merge(df,to_drop, indicator=True, how='outer')
.query('_merge=="left_only"')
.drop('_merge', axis=1))
讓我們定義您的示例 DataFrame,
data = {"ORDER ID":[123, 123, 123, 456, 456, 456, 789, 000], "ITEM CODE":['XXX', 'YYY', 'YYY', 'XXX', 'XXX', 'XXX', 'XXX', 'YYY']}
df = pd.DataFrame(data)
ORDER ID ITEM CODE
123 XXX
123 YYY
123 YYY
456 XXX
456 XXX
456 XXX
789 XXX
0 YYY
您可以根據所需的列或所有列刪除重復項,子集參數可以是列名列表。
new_df = df.drop_duplicates(subset='ORDER ID')
ORDER ID ITEM CODE
123 XXX
456 XXX
789 XXX
0 YYY
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.