当前位置: 首页 > 知识库问答 >
问题:

在Python中使用pd.merge_asof时如何防止数据被回收

段渊
2023-03-14

我希望加入两个数据帧使用pd.merge_asof功能。此功能允许我匹配唯一id和/或最近的密钥上的数据。在本例中,我正在匹配id以及小于或等于df1中的日期的最近日期。

有没有办法防止加入时df2的数据被回收?

这是我目前拥有的代码,用于回收df2中的值。

import pandas as pd
import datetime as dt

df1 = pd.DataFrame({'date': [dt.datetime(2020, 1, 2), dt.datetime(2020, 2, 2), dt.datetime(2020, 3, 2)],
                    'id': ['a', 'a', 'a']})

df2 = pd.DataFrame({'date': [dt.datetime(2020, 1, 1)],
                    'id': ['a'],
                    'value': ['1']})

pd.merge_asof(df1,
              df2,
              on='date',
              by='id',
              direction='backward',
              allow_exact_matches=True)

这是我希望看到的输出,而不是只有第一次匹配成功的地方

共有1个答案

钱嘉致
2023-03-14

如果合并方向为向后,则可以在合并后对重复的id和df2的date执行掩码操作:

out = pd.merge_asof(df1,
              df2.rename(columns={'date':'date1'}),    # rename df2's date
              left_on='date',
              right_on='date1',                        # so we can work on it later
              by='id',
              direction='backward',
              allow_exact_matches=True)

# mask the value
out['value'] = out['value'].mask(out.duplicated(['id','date1']))
# equivalently
# out.loc[out.duplicated(['id', 'date1']), 'value'] = np.nan

输出:

        date id      date1 value
0 2020-01-02  a 2020-01-01     1
1 2020-02-02  a 2020-01-01   NaN
2 2020-03-02  a 2020-01-01   NaN
 类似资料:
  • 问题内容: 有没有一种方法可以使类函数不可重写?类似于java的关键字。即,任何覆盖的类都不能覆盖该方法。 问题答案: 问题是您正在尝试使用Java哲学来用Python编写。有些东西会延续,但不是全部。在Python中,您可以执行以下操作,这非常好,但是完全违反了Java对对象的看法。 如果您确实需要,可以尝试此处发布的代码。但是正如您所看到的,有很多代码可以让它执行您想要的操作。还应注意,即使是

  • 问题内容: 我正在使用BeautifulSoup解析HTML表,如下所示: 我将多个语句重构为一个函数: 像这样被称为: 我的问题是,当函数找不到匹配项时,它将返回,将被打印出来。这是不希望的。 有什么方法可以使此函数仅在满足if条件时才返回值? 问题答案: 如果在退出函数调用时未指定return ,Python将始终返回。您的选择是: 如果不满足条件,则返回其他内容。 如果返回则忽略该函数 选项

  • 本文向大家介绍如何防止cookie被盗用?相关面试题,主要包含被问及如何防止cookie被盗用?时的应答技巧和注意事项,需要的朋友参考一下 禁止第三方网站带cookie(same-site属性) 每次请求需要输入图形验证码 使用Token验证 为cookie设置HttpOnly 设置CSP 使用Referer验证 禁止网页内嵌 使用https cookie带上用户ip加密

  • 问题内容: 我正在编写一个程序,通过pickle模块缓存一些结果。目前发生的情况是,如果在执行操作时按ctrl-c,则会被打断,从而导致文件损坏(即仅部分写入,因此无法再次进行编辑)。 有没有办法使代码块或通常的代码块不间断?我当前的解决方法如下所示: 如果操作被中断,重新启动该操作似乎很愚蠢,所以我正在寻找一种推迟中断的方法。我该怎么做呢? 问题答案: 将函数放在线程中,然后等待线程完成。 除非

  • 问题内容: 问题:有没有办法使用该函数的方法? 我有一个脚本: 我从Unix命令行这样称呼它: 它返回: 这个脚本也是如此: 但是,当我运行此脚本并将其通过管道传递给时: 然后我得到这个错误: 我也尝试了下面的解决方案,但仍然得到了: 问题答案: 这是正常现象,因为读过程(头)会终止并关闭管道的末端,而写过程(python)仍会尝试进行写操作。 Is 是 一种异常情况,并且python脚本收到一个

  • 问题内容: 构建我的第一个Web应用程序,并希望更好地理解SQL注入(https://github.com/astaxie/build-web- application-with- golang/blob/master/en/eBook/09.4.md )。 从始终使用’database / sql’库和使用’构造查询可以得到多少保护?而不是容纳字符串?在这种情况下,我仍然需要担心哪种SQL注入攻