【问题标题】:How to filter on year and quarter in pandas如何在熊猫中过滤年份和季度
【发布时间】:2015-04-07 05:00:20
【问题描述】:

我有一个 DataFrame,其中有一列类型为 datetime64[ns]。我想过滤年份和季度。有关如何执行此操作的任何建议?

我已经尝试过这个麻烦的解决方案

data = data[(pd.Series(pd.DatetimeIndex(data['MatCalID']).year).isin([2018]) & pd.Series(pd.DatetimeIndex(data['MatCalID']).quarter).isin([2,3]))]

为什么要这么复杂的解决方案?:

  • 必须使用 pd.DatetimeIndex 才能访问“年”和“季度”
  • 必须使用pd.Series才能使用'isin'

很遗憾,我收到“提供的无法对齐的布尔系列键”错误。

有人知道怎么做吗?

【问题讨论】:

  • 您的 pandas 版本是 0.15.0 还是更高版本?如果是这样,这似乎没有必要转换为 datetimeIndex,因为您可以通过 .dt 访问 yearquarter,例如price['MatCalID'].dt.year 你也想要类似data[(price['MatCalID'].dt.year == 2008) & (price['MatCalID'].dt.quarter.isin([2,3]))] 的东西吗?
  • 还有dataprice是什么关系?这些观点是同一个df吗? df的?
  • 感谢 Ed,'dt' 完美运行。我指的是数据,而不是价格。现在已在问题中进行了更改。
  • 所以当你说工作时,你的意思是我应该发帖作为答案?
  • 是的,你应该这样做

标签: python pandas


【解决方案1】:

如果您正在运行 pandas 版本 0.15.0 或更高版本,则无需将系列转换为 DateTimeIndex,因为现在有一个新的日期时间属性 .dt。您可以使用它来访问日期时间对象的年份和季度属性,并使用布尔条件来过滤 df:

data[(data['MatCalID'].dt.year == 2008) & (data['MatCalID'].dt.quarter.isin([2,3]))]

当您想要测试多个值而不是单个值的成员资格时,通常应该使用 isin

【讨论】:

    猜你喜欢
    • 2020-08-20
    • 2016-11-29
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多