【发布时间】:2020-04-28 17:23:17
【问题描述】:
我想使用 query 函数根据 time 列过滤我的数据框,并在上一个 N 月(或任何时间段)获取带有 time 的行。
基本上我需要类似的东西:
df = df.query("time.isin(timeperiod('5M'))")
或
df = df.query("now() >= time >= now() - timeperiod('5M')")
我正在尝试为我的过滤器函数创建查询模式,使用它很重要 query()函数。
请注意,timeperiod() 和 now() 函数不可用,我使用它们是为了更好地理解我想要的解决方案。我的意思是请在您的解决方案中定义这些函数。
示例:
df = pd.DataFrame()
df['time1'] = pd.date_range('1/1/2019', periods=1000, freq='D')
df['time2'] = pd.date_range('1/1/2018', periods=1000, freq='D')
示例数据可以有其他一些列。
我需要使用query() 函数过滤数据以获取每个给定列的最后一个N 月内的记录。例如,我想要过去 2 个月的 time1 和过去 3 个月的 time2 记录。就像获取过去 3 个月内被雇用并在过去 2 个月内被解雇的人员的记录。
更新 1:
感谢@jezrael,我可以像这样在query() 中获得now() 函数:
df = df.query("@pd.Timestamp('now') >= time")
当然,Timestamp 可以替换为 'to_datetime` 或其他内容。
但问题是当我尝试像这样获取周期开始的时间戳时:
df = df.query("time >= (@pd.Timestamp('now') + @pd.to_timedelta('30day'))")
我得到:
Cannot convert input ... of type <class 'pandas._libs.tslibs.timedeltas.Timedelta'> to Timestamp
再次使用 DateOffset 或其他时间增量函数会导致类似的错误。
但使用 变量 设置目标日期(如 @jezrael 所述)有效。
我将使用变量,因为我现在看不到任何其他方法,但我会保持这个问题开放,看看是否有更好的方法。
【问题讨论】:
标签: python pandas datetime filter