嗨,我正試圖比較兩個df的情況。如果相同的 ID 出現在 df2 中,我想將其添加到 df1 的 "計數 "列中。
在這之后,我想把 df2 中所有具有唯一 ID 的記錄添加到 df1。
在我第一次運行代碼時,它是有效的(df1 的計數被增加,并且新的 ID 被添加為新的行),然而第二次運行時,"只能比較相同標記的系列物件 "的錯誤被提出。 我想這是由于df1和df2的行數不同造成的。 有什么方法可以解決這個問題或者我應該采取的其他方法嗎?
import pandas as pd
boxes1 = {'ID': ['1','2','3', '4', '5','6','7','8'】。]
'Shape': ['矩形','矩形','方形','矩形'。 '正方形','正方形','正方形','長方形']
}
boxes2 = {'ID': ['9','10','1', '4', '5','14','7','8'】。]
'Shape': ['Rectangle','Rectangle','Square','Rectangle'。 '正方形','正方形','正方形','長方形']
}
df1 = pd.DataFrame(box1, columns= ['ID','Shape'] )
df2 = pd.DataFrame(box2, columns= ['ID','Shape'] )
df1['count'] = 0]
df2['count'] =0
#比較dfs,如果出現相同的ID,則在df1上加1。
df1.loc[(df3["ID"] == df1["ID"]), '計數'] = 1 >。
#Compare dfs and adds any unique IDs to df1[/span
df1 = pd.concat([df1, df3]).drop_duplicates('ID').reset_index(drop=True)
uj5u.com熱心網友回復:
你可以使用.isin(),它對df1和df2不需要相同的行數和索引,如下所示:
將你的代碼 df1.loc[(df3["ID"] == df1["ID"]), 'count'] = 1 替換為以下代碼:
df1.loc[df1['ID'].isin(df2['ID']), 'count'] = 1
結果:
print(df1)
ID 形狀計數
0 1矩形 1
1 2 長方形 0
2 3 方形 0
3 4 長方形 1
4 5 方形 1
5 6 方形 0
6 7 方形 1
7 8 長方形 1
然后,在你最后一行代碼之后:
(將df3修改為df2):
df1 = pd.concat([df1, df2]).drop_duplicates('ID').reset_index(drop=True)
結果:
print(df1)
ID 形狀計數
0 1矩形 1
1 2 長方形 0
2 3 方形 0
3 4 長方形 1
4 5 方形 1
5 6 方形 0
6 7 方形 1
7 8 長方形 1
8 9 長方形0
9 10 長方形0
10 14 方形 0
uj5u.com熱心網友回復:
你可以使用groupby_agg:
df1 = pd.concat([df1, df2])
.groupby('ID', sort=False)
.agg({'ID': 'first'/span>, 'Shape'/span>: 'first', 'count': lambda x: len(x)-1})
.reset_index(drop=True)
>>> out
ID 形狀計數
0 1矩形 1
1 2 長方形 0
2 3 方形 0
3 4 長方形 1
4 5 方形 1
5 6 方形 0
6 7 方形 1
7 8 長方形 1
8 9 長方形0
9 10 長方形0
10 14 方形 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/307666.html
標籤:
