1 回答
TA贡献1846条经验 获得超7个赞
pandas.concat
两个数据框concat
两个数据框,但仅在两个数据框的列上连接的顺序很重要,
df1
需要放在第一位df1
将带来不在的行df2
用于
.duplicated
创建遮罩应用蒙版,这将删除多余的行
dfc
现在将只有重复的行,并且来自的所有行都df1
将排在第一位df1
和之间的所有匹配行将df2
是True
,但来自的额外行将df1
是False
最后,
.drop_duplicates
withkeep='first'
将删除 底部的所有重复项,从而仅保留具有正确索引的dfc
行。df1
import pandas as pd
# concat dataframes
dfc = pd.concat([df1[df2.columns], df2])
# drop non-duplicate rows and then drop duplicates, but keep the 1st
df2_correct_indices = dfc[dfc.duplicated(keep=False)].drop_duplicates(keep='first')
# display(df2_correct_indices)
A1 A2 A3 A4
0 111 555 999 101
1 222 666 123 202
2 333 777 456 303
3 444 888 789 404
使用的示例数据
df1
df1 = pd.DataFrame({'Name': ['ABC-123', 'DEF-456', 'GHI-789', 'JKL-321', 'not_in_df2'],
'A1': [111, 222, 333, 444, 1000],
'A2': [555, 666, 777, 888, 1000],
'A3': [999, 123, 456, 789, 1000],
'A4': [101, 202, 303, 404, 1000],
'QQ': [1.3, 2.5, 3.7, 4.9, 1000]})
Name A1 A2 A3 A4 QQ
0 ABC-123 111 555 999 101 1.3
1 DEF-456 222 666 123 202 2.5
2 GHI-789 333 777 456 303 3.7
3 JKL-321 444 888 789 404 4.9
4 not_in_df2 1000 1000 1000 1000 1000.0
df2
df2 = pd.DataFrame({'A1': [444, 222, 111, 333],
'A2': [888, 666, 555, 777],
'A3': [789, 123, 999, 456],
'A4': [404, 202, 101, 303]})
A1 A2 A3 A4
0 444 888 789 404
1 222 666 123 202
2 111 555 999 101
3 333 777 456 303
添加回答
举报