合并两个DF后,我有以下数据集:
DB_ID | x_val | y_val|
---|---|---|
x01 | 405 | 407|
x01 | 405 | 405 |
x02 | 308 | 306 |
x02 | 308 | 308 |
x03 | 658 | 658 |
x03 | 658 | 660 |
x04 | 无 | 658 |
x04 | 无 | 660 |
x05 | 658 | 660 |
x06 | 660 | 660 |
想法是比较两列是否不相等,然后按DB_ID
:排序并重新保存重复项
df = (df.assign(new = df['x_val'].ne(df['y_val']))
.sort_values(['DB_ID','new'])
.drop_duplicates('DB_ID')
.drop('new', axis=1))
print (df)
DB_ID x_val y_val
1 x01 405 405
3 x02 308 308
4 x03 658 658
6 x04 None 658
8 x05 658 660
9 x06 660 660
如果需要相等的NaN
s或None
s,请使用:
df = (df.assign(new = df['x_val'].fillna('same').ne(df['y_val'].fillna('same')))
.sort_values(['DB_ID','new'])
.drop_duplicates('DB_ID')
.drop('new', axis=1))
也许,您可以简单地使用:
df = df[df['x_val'] == df['y_val']]
print(df)
# Output
DB_ID x_val y_val
1 x01 405 405
3 x02 308 308
4 x03 658 658
我认为你不需要drop_duplicates
或duplicated
,但如果你想确保每个DB_ID
只剩下一个实例,你可以附加.drop_duplicates('DB_ID')
df = df[df['x_val'] == df['y_val']].drop_duplicates('DB_ID')
print(df)
# Output
DB_ID x_val y_val
1 x01 405 405
3 x02 308 308
4 x03 658 658