1
我有以下2數據幀:比較兩組結果
DF1:
DATE ID_1 ID_2 RESULT
0 2014-06-16 1 a RED
1 2014-07-01 1 a WHITE
2 2014-08-16 2 c BLUE
3 2015-08-16 3 a RED
DF2
DATE ID_1 ID_2 RESULT
0 2014-06-16 1 z WHITE
1 2014-07-01 1 z WHITE
2 2014-08-16 2 h BLUE
3 2014-08-16 3 k RED
,您可以通過運行此獲得:
df1 = pd.DataFrame(columns=["DATE","ID_1", "ID_2", "RESULT" ])
df2 = pd.DataFrame(columns=["DATE","ID_1", "ID_2","RESULT"])
df1["DATE"] = ['2014-06-16', '2014-07-01', '2014-08-16', '2015-08-16']
df1['ID_1'] = [1,1,2,3]
df1['ID_2'] = ['a', 'a', 'c', 'a']
df1['RESULT'] = ['RED', 'WHITE', 'BLUE', 'RED']
df2["DATE"] = ['2014-06-16', '2014-07-01', '2014-08-16' , '2014-08-16']
df2['ID_1'] = [1,1,2,3]
df2['ID_2'] = ['z', 'z', 'h', 'k']
df2['RESULT'] = ['WHITE', 'WHITE', 'BLUE', 'RED']
現在,我需要GROUPBY「ID_1」上都和比較,如果所有列(ID_2除外)是相等的。理想的情況是通過展示不同
結果應該是這樣的:
DATE ID_1 ID_2x ID2y RESULTx RESULTy
2014-06-16 1 z a WHITE RED
我試圖通過如下分組:
grp1 = df1.groupby("ID_1")
grp2 = df2.groupby("ID_1")
for (g1,g2) in zip(grp1,grp2):
g1[1][["DATE", "RESULT"]] != g2[1][["DATE", "RESULT"]]
但我認爲是沒有效率的。此外,我收到一個比較錯誤:
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
有關如何繼續的任何想法?
謝謝!
「df1」和「df2」沒有共同的「ID_2」值。除非它們具有唯一的'ID_2'值的完全相同的列表,否則通過壓縮組來迭代是一個壞主意。即使如此,比較這些羣體將會很棘手,因爲它們可能具有不同的長度。 – IanS
當你說「結果應該是」時,你的意思是下面的代碼顯示了預期結果的一行還是整個預期的結果?這並不完全清楚你想要比較的結果是什麼。輸出中應包含給定行的條件是什麼? – ASGM
你說錯了,只是修正了。我的意思是按ID_1分組。 – user2320577