python - 查找值小于/大于另一个数据帧的行

标签 python pandas

我有 2 个数据框:

df = pd.DataFrame({'begin': [10, 20, 30, 40, 50],
                     'end': [15, 23, 36, 48, 56]})
   begin  end
0     10   15
1     20   23
2     30   36
3     40   48
4     50   56

df2 = pd.DataFrame({'begin2': [12, 13, 22, 40],
                      'end2': [14, 13, 26, 48]})
   begin2  end2
0      12    14
1      13    13
2      22    26
3      40    48

如何获取 df2 中位于 df1 行内的行?我希望将 df2 的每一行与 df1 的所有行进行比较。

也就是说,我想要一个像这样的 df3:

   begin2  end2
0      12    14
1      13    13
3      40    48

我尝试过:

df3 = df2.loc[ (df['begin'] <= df2['begin2']) & (df2['end2'] <= df['end'] )]

但它仅逐行比较并要求相同大小的数据帧。

最佳答案

您需要applyboolean indexing :

df = df2[df2.apply(lambda x: any((df['begin'] <= x['begin2']) & 
                                 (x['end2'] <= df['end'])), axis=1)]
print (df)
   begin2  end2
0      12    14
1      13    13
3      40    48

详细信息:

print (df2.apply(lambda x: any((df['begin'] <= x['begin2']) & 
                               (x['end2'] <= df['end'])), axis=1))
0     True
1     True
2    False
3     True
dtype: bool

关于python - 查找值小于/大于另一个数据帧的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46972640/

相关文章:

python - 我如何解决此错误 'webelement does not support indexing"[webdriver][python]

python - Kivy - 根据 If 语句的结果显示/隐藏矩形

python - 为索引旋转具有多列的DataFrame

python - 从列表中查找基因名称到数据框

python pandas 根据条件添加列内容

python - base64 编码与 python 对象上的 pickling

python - 当使用 itertools 并将函数应用于每一行时,“int”对象不可迭代

python - Pandas .to_csv(文件名,引用=csv.QUOTE_NONE ERRORTypeError : to_csv() got an unexpected keyword argument 'quoting'

python - 根据不同的行和列拆分行

python - 关闭 python 脚本之前的操作