Python 2.7 使用条件合并两个数据帧

Python 2.7 使用条件合并两个数据帧,python-2.7,pandas,merge,dataframe,Python 2.7,Pandas,Merge,Dataframe,pandas中是否有方法通过使用条件语句合并两个长度不同的数据帧? 例如: pd.merge(df1,df2,on=) 例如,假设有两个数据帧,分别包含10000和15000个对象的df1和df2。 我想使用两个目录的x和y位置来匹配它们之间的公共对象。对象应在df1和df2之间匹配,以便匹配的对象彼此位于1m半径范围内 除了x和y之外,这两个数据帧之间没有任何共同之处 到目前为止,我认为最好的方法是使用for循环。我相信有一个更快更好的方法来做到这一点 delta = 1.0 result

pandas中是否有方法通过使用条件语句合并两个长度不同的数据帧? 例如:

pd.merge(df1,df2,on=)
例如,假设有两个数据帧,分别包含10000和15000个对象的df1和df2。 我想使用两个目录的x和y位置来匹配它们之间的公共对象。对象应在df1和df2之间匹配,以便匹配的对象彼此位于1m半径范围内

除了x和y之外,这两个数据帧之间没有任何共同之处

到目前为止,我认为最好的方法是使用for循环。我相信有一个更快更好的方法来做到这一点

delta = 1.0
result = pd.concat([df1, df2], axis=1)
for index, values in result.T.iteritems():
   if len(result[((result.x.iloc[:,1]-delta)<values.x.iloc[0]) & ((result.x.iloc[:,1]+delta)>values.x.iloc[0]) &
  ((result.y.iloc[:,1]-delta)<values.y.iloc[0]) & ((result.y.iloc[:,1]+delta)>values.y.iloc[0])])>0 :

        print values.id
delta=1.0
结果=pd.concat([df1,df2],轴=1)
对于索引,result.T.iteritems()中的值:
如果len(result[((result.x.iloc[:,1]-delta)值为.x.iloc[0])&
((result.y.iloc[:,1]-delta)value.y.iloc[0]))>0:
打印值.id

是否需要将df2中的每个值与df1中的每个值进行比较?如果超过一行符合条件,该怎么办?这是可能的吗?你不能用任何函数连接条件语句。您必须在每个可以连接的数据框中创建键。@chris sc所有问题都是。所以这应该能够识别多个匹配项并返回它们。@firelynx您能解释一下您在熊猫中是如何做到这一点的吗?显然,有一个非pandas函数也使用kd树进行类似操作:当您需要检查每个值排列时,它的复杂性为O(m*n)(m和n是每个df的值数)。你需要解决的问题是如何让你的循环更有效,但我不认为有一个直接的方法(即现有的函数)在pandas中做到这一点。
delta = 1.0
result = pd.concat([df1, df2], axis=1)
for index, values in result.T.iteritems():
   if len(result[((result.x.iloc[:,1]-delta)<values.x.iloc[0]) & ((result.x.iloc[:,1]+delta)>values.x.iloc[0]) &
  ((result.y.iloc[:,1]-delta)<values.y.iloc[0]) & ((result.y.iloc[:,1]+delta)>values.y.iloc[0])])>0 :

        print values.id