将未合并到新DF的数据推送到熊猫

时间:2020-03-06 16:34:39

标签: python pandas

我有两个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 

感谢您提供任何见识或指导。

亲切的问候,

2 个答案:

答案 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')