我有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
答案 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