我想在几个月之间过滤一个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)]
感谢您的支持。
答案 0 :(得分:0)
dfperiod = df[(df['month'] >= '10') & (df['month'] <= '11') & (df['monthday']
>= '1021') & (df['monthday'] <='1115')]