使用变量过滤具有多个条件的数据框(Pandas)时出错



我试图通过过滤现有数据框(stock_data)根据两个标准创建一个临时数据框;

  1. stock_data标记列匹配tick_id变量
  2. stock_data日期列在startend的范围内(变量是使用pd.to_datetime创建的)

我已经尝试过用两种不同的解决方案

:

temp = stock_data[(stock_data.ticker == tick_id) & (stock_data["date"].isin(pd.date_range(start, end)))]

第二:

mask = (stock_data.ticker == tick_id) & ((stock_data.date > start) & (stock_data.date <= end))
temp = stock_data.loc[mask]

两个解决方案都导致相同的错误:

ValueError: Can only compare identically-labeled Series objects

错误告诉您tick_id系列与stock_data['ticker']具有不同的标签。我猜一个是像"AAPL"这样的股票代码名称,另一个是数字股票代码id?(或者更糟,只是自动索引0,1,2…

解决方案:将ticker或tick_id作为两个series/dataframe的索引如果可以的话,在任何地方都这样做。没有数值指标。那么连接、聚合等就非常容易了。

(PS这对大多数用例更好,也使导出CSV或pickle更直观。)

无论如何,这看起来像一个糟糕的尝试做一个连接操作。