从这里Displaying the unique elements from the two columns in two dataframe
data1 = {'date': ['1998', '1999','1999','2000','1999'],
'node1': [1,1,2,3,3],
'node2': [3,4,3,4,8],
'weight': [1,1,1,1,1], }
df1 = pd.DataFrame(data1, columns = ['date', 'node1','node2','weight'])
data2 = {'date': ['2002','2001','2003','2002','2002','2001'],
'node1': [1,1,1,2,2,3],
'node2': [2,3,4,3,5,4],
'weight': [1,1,1,1,1,1], }
df2= pd.DataFrame(data2, columns = ['date', 'node1','node2','weight'])
我想搜索两个数据帧中的两列(node1,node2),并显示两个数据帧中唯一的节点。在此示例中,来自data1的8和来自data2的5是数据帧中的唯一节点。
输出格式:
dataframe1:8
dataframe2:5
答案 0 :(得分:1)
使用位merge
修改前一个答案:
a = pd.DataFrame({'node':df1[['node1','node2']].values.ravel()})
b = pd.DataFrame({'node':df2[['node1','node2']].values.ravel()})
c = pd.merge(a, b, how='outer', indicator=True, on='node')
#
d = c.loc[c['_merge'] == 'left_only', ['node']]
print (d)
node
25 8
e = c.loc[c['_merge'] == 'right_only', ['node']]
print (e)
node
26 5
但如果表现很重要,请使用numpy.setdiff1d
:
a = df1[['node1','node2']].values.ravel()
b = df2[['node1','node2']].values.ravel()
d = np.setdiff1d(a,b)
print (d)
[8]
e = np.setdiff1d(b,a)
print (e)
[5]
答案 1 :(得分:1)
使用pd.concat
和pd.Series.drop_duplicates
cols = ['node1', 'node2']
pd.concat(
[d[cols] for d in [df1, df2]],
keys=[1, 2]
).stack().drop_duplicates(keep=False).reset_index([1, 2], drop=True)
1 8
2 5
dtype: int64