我有两个DF,如下所示:
DF1
ID Green
B1 20
B2 10
B3 5
B4 2
B5 0
B8 0
DF2
ID Red
B1 2
B2 4
B3 10
B9 12
B7 10
我已经将两个数据框与以下内容合并:
import pandas as pd
import numpy as np
DF3 = pd.merge(DF1, DF2, how = 'left', left_on='ID, right_on='ID')
ID Green Red
B1 20 2
B2 10 4
B3 5 10
是否有一种方法可以将未匹配/合并的DF1中的数据推送到新数据帧(例如DF4),并且将DF2中的数据也同样推送到新数据帧(例如DF5) ?
DF4和DF5为:
DF4
ID Green
B4 2
B5 0
B8 0
DF5
ID Red
B9 12
B7 10
感谢您提供任何见识或指导。
亲切的问候,
答案 0 :(得分:1)
通过检查哪些部分在一个而不是另一个中,可以看到两个数据框(将不会合并的部分)之间的差异。例如,
DF1[~DF1.isin(DF2)].dropna()
结果:
ID Green
3 B4 2
4 B5 0
5 B8 0
和
DF2[~DF2.isin(DF1)].dropna()
结果:
ID Red
3 B9 12
4 B7 10
答案 1 :(得分:1)
管理此问题的一般方法是将所有数据提取到单个数据框中-只需更改“外部”的方式即可。
DF3 = pd.merge(DF1,DF2,如何='左',left_on ='ID,right_on ='ID')
然后您可以通过调用以下内容来访问两者的联合:
DF3.dropna(thresh = 1)
您可以使用仅红色值调用的内容来访问它们:
DF3.loc [DF3 ['Green']。isna()]
如果调用反函数DF3 ['Red']。notna(),则最终将得到绿色值和红色值的行以及红色值和NaN的行。因此,您必须调用所有行。如果您确实只需要一列红色或绿色,请参见下文。
DF3.loc [DF3 ['Green']。isna()]。drop(labels ='Green')