我想从其他两个(通用名称字段不具有公用密钥)(df1和df2)创建新的数据框df3。
df1:
key1 start_df2 end_df1 name
info1 0 101 paul
info2 640 700 paul
info3 700 801 pierre
df2:
key2 name start_df2 end_df2
0 paul 635 962
1 pierre 941 1318
2 jacques 102 587
在以下条件下的预期结果:如果start_df1> start_df2&end_df1 df3 .... 目标是创建df3(合并吗?),但是如果没有df1和df2之间的公共键列,我将无法创建。 所以我首先尝试.copy: 但是后来我无法从df1中获取信息。 此外,创建第三个表很耗资源,可能会有更快的方法。 我使用3个嵌套循环尝试了此代码,但确实花费了太多时间: 谢谢。key? name start_df2 end_df2 start_df1 end_df1 key1
? paul 635 962 640 700 info2
? paul 635 962 700 801 info3
? pierre 941 1318 NA NA NA
df3 = df2[['contig', 'start_contig', 'end_contig']].copy()
nbExpected = 0
for k, v in df2['name'].items() :
for row in df1.groupby(['name']):
# print(type(row))
# print(row[1].index)
for var in enumerate(row[1].index):
# print(var[1])
# print(df1.loc[var[1], 'start_df1'])
nbExpected += len(df1[(df2['name'] == v) \
& (df1.loc[var[1], 'start_df1'] > (df2.loc[k,'start_df2'])) \
& (df1.loc[var[1], 'end_df1'] < (df2.loc[k,'end_df2']))
] )
print('nbExpected', nbExpected)