按工作日过滤Pandas Dataframe

时间:2017-10-22 16:22:10

标签: python pandas dataframe filter filtering

我想在几个月之间过滤一个pandas数据帧多年。

我有一个包含2000 - 2016年数据的数据框,我希望每年的10月22日到11月15日之间进行过滤。

为了保持这个简单,我们说我有4列。日期指数,月份指数,日期指数和价格。

到目前为止,我尝试连接月份列和日期列。 IE浏览器。 10月22日变为1022年,11月15日变为1115年。

当我在#10之前查看日期时会出现问题。 IE浏览器。 11月首先是111而不是1101。

所以当我做一个条件过滤器指定df [&#39; monthday&#39;]&gt; 1015&amp; df [&#39; monthday&#39;]&lt; 1115它完全没有捕获从11月1日到11月9日的所有11月日期,因为111到119 <11。 1015。

我还尝试将此数字作为字符串进行比较,因此我已成功将111转换为str(1101)。但是这与int(1101)无法比较。

这是一个看似简单的问题,我没有运气解决。任何帮助表示赞赏。

下面的代码段。谢谢,

df = web.DataReader('SPY', 'yahoo',datetime.datetime(2015 ,1, 1), 
datetime.datetime.today())

#this adds zeroes but really doesn't help me
df['Day of Month'] = df['Day of Month'].astype(str).str.zfill(2)
df['month'] = df['month'].astype(str).str.zfill(2)

#This one converts it to str but can't compare str to int
df['monthday'] = df['month'].map(str) + df['Day of Month'].map(str) 

#This one converts it to a # but can't use 111 as November 1st because it is 
#smaller than 1015 ie October 15th and I want to filter between those dates.
df['monthday'] = pd.to_numeric(df.monthday, errors='coerce')

#here is where I attempt my intermonth filter for each year since 2000
df = df[(df['month'] >= 10) & (df['month'] <= 11) & (df['monthday'] >= 1021)  
& (df['monthday'] <=1115)]

感谢您的支持。

1 个答案:

答案 0 :(得分:0)

dfperiod = df[(df['month'] >= '10') & (df['month'] <= '11') & (df['monthday'] 
>= '1021')  & (df['monthday'] <='1115')]