作为最小的示例,请考虑以下两个DF(请注意,它们的大小不相等):

df
   min_val  max_val
0        0        4
1        5        9
2       10       14
3       15       19 
4       20       24
5       25       29

df1
   val
0    1
1    6
2    2
3   Nan
4    34

我正在try 判断df1中的每个值是否都可以在df中找到within any对.输出应该是一个新的数据帧,它将包含df1的val列、在其中找到它的那对,以及一个额外的列,该列带有一个名称标记,假设是‘in’和‘Not’.因此,输出应该如下所示:

   val   min_val  max_val  nameTag
0   1      0        4       within
1   6      5        9       within
2   2      0        4       within
3   Nan    Nan      Nan     not within
4   34     Nan      Nan     not within

到目前为止,我找到的任何解决方案都是逐行搜索df1中的val 2,它在df中的0-4对内(一些帖子对我不起作用,HEREHERE).

任何建议/建议/解决方案都将不胜感激. 谢谢

推荐答案

我会用merge_asof:

tmp = pd.merge_asof(df1.reset_index().sort_values(by='val').dropna(),
                    df.sort_values(by='min_val').astype(float),
                    left_on='val', right_on='min_val'
                   ).set_index('index').reindex(df1.index)

df1['nameTag'] = np.where(tmp['val'].le(tmp['max_val']), 'within', 'not within')

或者IntervalIndex分:

s = pd.Series('within', pd.IntervalIndex.from_arrays(df['min_val'], df['max_val']))

df1['nameTag'] =s.reindex(df1['val']).fillna('no within').to_numpy()

输出:

    val     nameTag
0   1.0      within
1   6.0      within
2   2.0      within
3   NaN  not within
4  34.0  not within

Python-3.x相关问答推荐

使用Python请求从特定URL下载图像时出错

替换Pandas中组下的列值

如何有效地计算Kernel/Matrix

Pandas 数据帧断言等同于NaN

我想判断df_entry_log[AM_PM],并根据测试填充列

如何在 python 中将带有时区信息的时间戳转换为 utc 时间

Python根据条件从多行读取值

Pandas groupby 然后 for each 组添加新行

使用 Python 在特定组的列中设置上限

Python3:是否可以将变量用作函数调用的一部分

如何通过 GitLab V4 api 列出 gitlab 项目中的所有项目变量

将名字转换成姓氏、首字母和中间字母的格式

Python 3.10 模式匹配 (PEP 634) - 字符串中的通配符

asyncio.Semaphore RuntimeError: Task got Future 附加到不同的循环

发送Electron邮件时的 MIMEText UTF-8 编码问题

使用 pytest.fixture 返回模拟对象的正确方法

python asyncio - 如何等待取消的屏蔽任务?

Python pathlib 获取父级相对路径

如何在 QGraphicsView 中启用平移和zoom

如何创建一个永远在其上运行滚动协程的事件循环?