繁体   English   中英

从两个数据框中的两列中获取非公共元素

[英]Getting the non common elements from the two columns in two dataframes

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'])

我想搜索每个数据框中的两列,然后输出其中包含非公共元素的行。

此数据的输出将是:

数据框 1:3 8 1999

数据框 2:2 5 2002

输出说明 - 通过搜索两个数据帧中的两行,我们发现 5 和 8 是非公共元素,因此打印包含它们的行。

编辑数据更正。

所以这可能不是最好的答案,但它有效:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM