Pandas时间戳和.isin功能

jm81lzqq  于 2023-04-10  发布在  其他
关注(0)|答案(1)|浏览(302)

我正在尝试创建一个函数,我将.apply()到一个dataframe:

  • 从函数中提供的参数中移除一个工作日
  • 检查这个新的一天是否在特定的日期集合中(格式为日期时间索引)

我已经简化了函数的逻辑来解决这个问题-稍后我将添加更多的逻辑。
我的职能:

def test(trade_date):
    if (trade_date - BDay(1)).isin(pricing_date):
        return True
    else:
        return False

错误:

AttributeError: 'Timestamp' object has no attribute 'isin'

看起来使用.isin和Timestamp有一个问题。但是,当我在dataframe本身中运行代码进行测试时:

df['Check'] = df['test_date'].isin(pricing_date)

返回预期的输出-- isin()可以正确处理此数据。

TradeDate
2023-01-03    False
2023-01-03    False
2023-01-03    False
2023-01-03    False
2023-01-03    False
              ...  
2023-03-22     True
2023-03-22     True
2023-03-22     True
2023-03-22     True
2023-03-22     True
Name: Check, Length: 14324, dtype: bool

调用.isin()的列的数据类型为:datetime 64 [ns],但不确定如何将函数中的时间戳转换为这种数据类型-我在许多地方读到它们实际上是等效的,只是python vs pandas的类型。

Name: test_date, Length: 14324, dtype: datetime64[ns]

任何帮助是赞赏!
尝试将时间戳传递到.isin中-直接在 Dataframe 上运行时的预期输出。

tvmytwxo

tvmytwxo1#

Pandas dataframe applypd.Series内部的所有 values 上运行函数,而不是在pd.Series中运行函数。因此,trade_date将是一个时间戳,它没有isin方法。你应该这样做:

def test(trade_date):
    return (trade_date - BDay(1)) in pricing_date

或者,更简单:

df['Check'] = (df['test_date']-BDay(1)).isin(pricing_date)

相关问题