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'])
我想搜索每个数据帧中的两列,然后输出其中包含非公共元素的行。
此数据的输出为:
dataframe1:3 8 1999
dataframe2:2 5 2002
输出说明 - 通过搜索两个数据帧中的两行,我们发现5和8是非常见元素,因此打印包含它们的行。
修改了编辑数据。
答案 0 :(得分:1)
所以这可能不是最好的答案,但它有效:
dfs = pd.concat([df1, df2])
nodes = pd.concat([dfs['node1'], dfs['node2']])
counts = nodes.value_counts()
unique = []
for index, value in zip(counts.index, counts.tolist()):
if value == 1:
unique.append(index)
unique_df1 = df1[(df1['node1'].isin(unique)) | ((df1['node2'].isin(unique)))]
unique_df2 = df2[(df2['node1'].isin(unique)) | ((df2['node2'].isin(unique)))]
print(unique_df1)
print(unique_df2)
输出:
date node1 node2 weight
4 1999 3 8 1
date node1 node2 weight
4 2002 2 5 1