如何根据两列的值删除重复行?
How to drop duplicate rows based on values of two columns?
我有一个这样的数据框:
Category Date_1 Score_1 Date_2 Score_2
A 13/11/2019 5 13/11/2019 10
A 13/11/2019 5 14/11/2019 55
A 13/11/2019 5 15/11/2019 45
A 13/11/2019 5 16/11/2019 80
A 14/11/2019 3 13/11/2019 10
A 14/11/2019 3 14/11/2019 55
A 14/11/2019 3 15/11/2019 45
A 14/11/2019 3 16/11/2019 80
A 15/11/2019 7 13/11/2019 10
A 15/11/2019 7 14/11/2019 55
A 15/11/2019 7 15/11/2019 45
A 15/11/2019 7 16/11/2019 80
B 13/11/2019 4 13/11/2019 18
B 13/11/2019 4 14/11/2019 65
B 13/11/2019 4 15/11/2019 75
B 13/11/2019 4 16/11/2019 89
B 14/11/2019 9 13/11/2019 18
B 14/11/2019 9 14/11/2019 65
B 14/11/2019 9 15/11/2019 75
B 14/11/2019 9 16/11/2019 89
B 15/11/2019 8 13/11/2019 18
B 15/11/2019 8 14/11/2019 65
B 15/11/2019 8 15/11/2019 75
B 15/11/2019 8 16/11/2019 89
我想保留两个日期相同的行。
我是这样做的:
df.drop_duplicates(subset=['Date_1', 'Date_2'])
但它不起作用。不知道如何删除那些多余的行?
使用 boolean indexing
比较两列:
df1 = df[df['Date_1'] == df['Date_2'])
df1 = df.query("Date_1 == Date_2")
您可以使用 duplicated
和参数 subset
指定要使用 keep=False
检查的列,用于通过布尔索引屏蔽和过滤的所有重复项。以下应该有效:
df = df[df.duplicated(subset=['Date_1', 'Date_2'], keep=False)]
备注:最初,我可能误读了OP想要删除重复项,答案如下:
df = df.drop_duplicates(subset=['Date_1', 'Date_2'], keep='last')
您应该始终像上面那样分配 df
以应用更改。否则,您可以添加 inplace=True
以在不分配的情况下应用更改:
df.drop_duplicates(subset=['Date_1', 'Date_2'], keep='last', inplace=True)
如果这与其他人提供的解决方案一样不奏效,您可能需要检查 subset
中的那些列的数据类型是否有任何差异,例如日期时间格式。
我有一个这样的数据框:
Category Date_1 Score_1 Date_2 Score_2
A 13/11/2019 5 13/11/2019 10
A 13/11/2019 5 14/11/2019 55
A 13/11/2019 5 15/11/2019 45
A 13/11/2019 5 16/11/2019 80
A 14/11/2019 3 13/11/2019 10
A 14/11/2019 3 14/11/2019 55
A 14/11/2019 3 15/11/2019 45
A 14/11/2019 3 16/11/2019 80
A 15/11/2019 7 13/11/2019 10
A 15/11/2019 7 14/11/2019 55
A 15/11/2019 7 15/11/2019 45
A 15/11/2019 7 16/11/2019 80
B 13/11/2019 4 13/11/2019 18
B 13/11/2019 4 14/11/2019 65
B 13/11/2019 4 15/11/2019 75
B 13/11/2019 4 16/11/2019 89
B 14/11/2019 9 13/11/2019 18
B 14/11/2019 9 14/11/2019 65
B 14/11/2019 9 15/11/2019 75
B 14/11/2019 9 16/11/2019 89
B 15/11/2019 8 13/11/2019 18
B 15/11/2019 8 14/11/2019 65
B 15/11/2019 8 15/11/2019 75
B 15/11/2019 8 16/11/2019 89
我想保留两个日期相同的行。 我是这样做的:
df.drop_duplicates(subset=['Date_1', 'Date_2'])
但它不起作用。不知道如何删除那些多余的行?
使用 boolean indexing
比较两列:
df1 = df[df['Date_1'] == df['Date_2'])
df1 = df.query("Date_1 == Date_2")
您可以使用 duplicated
和参数 subset
指定要使用 keep=False
检查的列,用于通过布尔索引屏蔽和过滤的所有重复项。以下应该有效:
df = df[df.duplicated(subset=['Date_1', 'Date_2'], keep=False)]
备注:最初,我可能误读了OP想要删除重复项,答案如下:
df = df.drop_duplicates(subset=['Date_1', 'Date_2'], keep='last')
您应该始终像上面那样分配 df
以应用更改。否则,您可以添加 inplace=True
以在不分配的情况下应用更改:
df.drop_duplicates(subset=['Date_1', 'Date_2'], keep='last', inplace=True)
如果这与其他人提供的解决方案一样不奏效,您可能需要检查 subset
中的那些列的数据类型是否有任何差异,例如日期时间格式。