【问题标题】:How to select observations of df using datetime index atributes in Pandas?如何在 Pandas 中使用 datetimeindex 属性选择对 df 的观察?
【发布时间】:2015-04-17 05:08:40
【问题描述】:

给定这种类型的 df,我们有 DateTime 索引:

DateTime               A                           
2007-08-07 18:00:00    1
2007-08-08 00:00:00    2
2007-08-08 06:00:00    3
2007-08-08 12:00:00    4
2007-08-08 18:00:00    5
2007-11-02 18:00:00    6
2007-11-03 00:00:00    7
2007-11-03 06:00:00    8
2007-11-03 12:00:00    9
2007-11-03 18:00:00   10

我想使用索引的属性对观察进行子集化,例如:

  • 每月第一个工作日
  • 每月最后一个工作日
  • 每月的第一个星期五“WOM-1FRI”
  • 每月第三个星期五“WOM-3FRI”

我特别想知道这是否可以通过以下方式完成:

df.loc[(df['A'] < 5) & (df.index == 'WOM-3FRI'), 'Signal'] = 1

谢谢

【问题讨论】:

  • 从 pandas v.0.15.2 开始,对custom business daysDateTimeIndex 的相关操作提供实验性支持

标签: python datetime pandas time-series dataframe


【解决方案1】:

你可以试试……

# FIRST DAY OF MONTH
df.loc[df[1:][df.index.month[:-1]!=df.index.month[1:]].index]

# LAST DAY OF MONTH
df.loc[df[:-1][df.index.month[:-1]!=df.index.month[1:]].index]

# 1st Friday
fr1 = df.groupby(df.index.year*100+df.index.month).apply(lambda x: x[(x.index.week==1)*(x.index.weekday==4)])

# 3rd Friday
fr3 = df.groupby(df.index.year*100+df.index.month).apply(lambda x: x[(x.index.week==3)*(x.index.weekday==4)])

如果要删除fr1fr3的索引中的额外级别:

fr1.index=fr1.index.droplevel(0)
fr3.index=fr3.index.droplevel(0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 2018-09-19
    • 2021-03-30
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多