我需要匹配這兩個不同大小的數據框,獲得匹配的字段,然後比較它是大還是小。匹配2個不同的數據框返回值,然後比較
df = pd.DataFrame({'first_name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
'id': ['a1', 'a2', 'a3', 'a4', 'a5'],
'id2': ['', '', '', 'b1', 'b2'],
'cost':[1,2,3,4,5]}, columns = ['first_name', 'id','id2','cost'])
df
first_name id id2 cost
0 Jason a1 1
1 Molly a2 2
2 Tina a3 3
3 Jake a4 b1 4
4 Amy a5 b2 5
df2 = pd.DataFrame({'id': ['a1', 'a2', 'a3','b1','b2','b3'],'cost':[1,2,3,4,6,6]},columns = ['id','cost'])
df2
id cost
0 a1 1
1 a2 2
2 a3 3
3 b1 4
4 b2 3
5 b3 6
預期的結果是:
first_name id id2 cost
0 Jason a1 1
1 Molly a2 2
2 Tina a3 3
3 Jake a4 b1 4
的比賽是對ID1和ID2 DF完成,相比DF2的ID。儘管b2在id中,但它不包含在內,因爲df2中的匹配成本大於df中的成本。
我試圖沿着線的東西:
df[(df['id'].isin(df2['id']) == True) | (df['id2'].isin(df2['id']) == True)]
first_name id id2 cost
0 Jason a1 1
1 Molly a2 2
2 Tina a3 3
3 Jake a4 b1 4
4 Amy a5 b2 5
我似乎遇到了問題也比較成本和排除那些比匹配的成本較小。
這是一個例子,我正在處理的作品有df中的180萬條記錄,並且與df2中的170,000條記錄相匹配。在這裏,我比較了2列,但有4列我需要在DF中匹配。
我希望這是有道理的,因爲效率現在也在考慮之中,合併數據幀超過4次是沒有意義的。
又如:
df
first_name id id2 cost
0 Jason a1 7
1 Molly a2 2
2 Tina a3 3
3 Jake a4 b1 4
4 Amy a5 b2 8
df2
id cost
0 a1 6
1 a2 2
2 a3 3
3 b1 4
4 b2 6
5 b3 6
在上面的例子,
預期結果將是:
first_name id id2 cost
1 Molly a2 2
2 Tina a3 3
3 Jake a4 b1 4
所以A1,A2,A3,A4,B1和B2的匹配,但是因爲a1和b2的成本大於df2.cost的成本。他們被排除在外。
更正了我上面的例子。
任何想法?
能'df2'也有在列''id' a4'?如果是這樣,你會選擇哪種成本,'a4'或'b1'? – IanS
是的'df2'也可以在'id'列中有'a4'。預期結果是來自df的任何記錄,其中'df.id'或'df.id2'出現在'df2.id'中,並且如果df中的'cost'小於df2中的'cost'。 – BernardL