如何在 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)])
如果要删除fr1
和fr3
的索引中的额外级别:
fr1.index=fr1.index.droplevel(0)
fr3.index=fr3.index.droplevel(0)
【讨论】:
以上是关于如何在 Pandas 中使用 datetimeindex 属性选择对 df 的观察?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 pandas 系列列表中使用 OneHotEncoder?
如何在 Python 中使用 Pandas 创建会计年度列?
使用 MultiIndex 时如何在 Pandas 中使用转换器