根据数据框中2列的匹配值创建新列

时间:2019-10-15 09:24:45

标签: python pandas

我有2个数据框,我需要使用它们来创建第3个数据框。

第一个数据框如下所示:

route_id   entity_id_1      
 r1           1                  
 r1           4          
 r1           5 

第二个数据框看起来像这样:

route_id    entity_id_2
  r1          4
  r1          7
  r1          8
  r1          9

创建的第三个数据框应如下所示:

route id    compliance   
  r1           1/6

说明:

对于特定的route_id,符合性的计算方式为(匹配值的数量/不同的object_id的总数)

在这里,第一个数据帧中的entity_1和第二个数据帧中的entity_2匹配。

  

不。的匹配值= 1(“ 4”是唯一的   在两个数据框中都存在route_id'r1')

     

总编号两个数据帧中存在的不同的object_id的数量= 6(其中   是route_id'r1'的1,4,5,7,8,9

1 个答案:

答案 0 :(得分:0)

尝试一下:

df1=pd.DataFrame({'route_id':['r1','r1','r1'], 'entity_id_1':[1,4,5]})
df2=pd.DataFrame({'route_id':['r1','r1','r1','r1'], 'entity_id_1':[4,7,8,9]})

假设样本数据位于上述数据框中,请尝试以下

target_df = df1.groupby('route_id').apply(lambda x: x.entity_id_1.isin(df2[df2.route_id==x.route_id.values[0]]['entity_id_1']).sum()/len(np.unique(x.entity_id_1.tolist()+df2[df2.route_id==x.route_id.values[0]]['entity_id_1'].tolist()))).reset_index(name='compliance')

这将提供所需的输出print(target_df)

route_id  compliance
0       r1    0.166667