Python 3.x 连接两个没有相同键但具有匹配信息的列的数据帧
我想从另外两个数据帧(df1和df2)创建一个新的数据帧df3,这两个数据帧没有公共键,只有一个公共名称字段 df1: df2: 预期结果,在这种情况下:如果start_df1>start_df2&end_df1Python 3.x 连接两个没有相同键但具有匹配信息的列的数据帧,python-3.x,dataframe,merge,key,Python 3.x,Dataframe,Merge,Key,我想从另外两个数据帧(df1和df2)创建一个新的数据帧df3,这两个数据帧没有公共键,只有一个公共名称字段 df1: df2: 预期结果,在这种情况下:如果start_df1>start_df2&end_df1(df2.loc[k,'start_df2']))\ &(df1.loc[var[1],'end_df1']
df3 = df2[['contig', 'start_contig', 'end_contig']].copy()
但是我无法从df1获得信息
此外,创建第三个表会消耗资源,可能有更快的方法
我用3个嵌套循环尝试了这段代码,但它确实花费了太多时间:
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)
nbExpected=0
对于df2['name']中的k,v。items():
对于df1.groupby(['name'])中的行:
#打印(类型(行))
#打印(行[1]。索引)
对于枚举中的变量(行[1]。索引):
#打印(变量[1])
#打印(df1.loc[var[1],“start\u 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']))
] )
打印('nbExpected',nbExpected)
提前感谢。大家好,欢迎来到stackoverflow。请使用正确的代码格式,因为您的问题很难阅读,请提供一个小的数据示例,而不仅仅是您所有的代码。感谢MichaelJanz的及时回复和建议。这是一个Rewrdinghi,欢迎来到stackoverflow。请使用正确的代码格式,因为您的问题很难阅读,请提供一个小的数据示例,而不仅仅是您所有的代码。感谢MichaelJanz的及时回复和建议。这是一个改写
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)