如何在 Pandas 中使用 datetimeindex 属性选择对 df 的观察?

Posted

技术标签:

【中文标题】如何在 Pandas 中使用 datetimeindex 属性选择对 df 的观察?【英文标题】:How to select observations of df using datetime index atributes in Pandas? 【发布时间】: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 days 和DateTimeIndex 的相关操作提供实验性支持 【参考方案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)

【讨论】:

以上是关于如何在 Pandas 中使用 datetimeindex 属性选择对 df 的观察?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pandas 系列列表中使用 OneHotEncoder?

如何在 Python 中使用 Pandas 创建会计年度列?

使用 MultiIndex 时如何在 Pandas 中使用转换器

如何在 Pyspark 中使用 @pandas_udf 返回多个数据帧?

使用 Pandas 读取 CSV 时如何在列中保持前导零?

如何在 pandas 中使用过滤条件和 groupby