Python 使用Pandas选择月的哪一天作为日期范围的开始
我有一个在timeseries上索引的数据集。我想从数据中的行中获取18到13天后的日期的所有数据。例如Python 使用Pandas选择月的哪一天作为日期范围的开始,python,pandas,Python,Pandas,我有一个在timeseries上索引的数据集。我想从数据中的行中获取18到13天后的日期的所有数据。例如 df = pd.DataFrame.from_records([ (datetime(2013, 2, 16),2), (datetime(2013, 2, 18),5), # (datetime(2013, 2, 19),6), # (datetime(2013, 3, 1), 7), # (datetime(2013, 3, 17),
df = pd.DataFrame.from_records([
(datetime(2013, 2, 16),2),
(datetime(2013, 2, 18),5), #
(datetime(2013, 2, 19),6), #
(datetime(2013, 3, 1), 7), #
(datetime(2013, 3, 17),1),
(datetime(2013, 3, 20),3), #
(datetime(2013, 3, 25),4), #
(datetime(2013, 4, 1), 8)],
columns=["time_slot", "data"],
index=["time_slot"])
只应包括标记为的行
做:
days = df.ix[df.index.day == 18].index
for d in days:
print df.ix[d:d+timedelta(days=13)]
将只打印前三条标记的记录。有没有一种方法可以在不明确指定月份的情况下,根据月份选择日期范围 我不知道你为什么要这样做,但我更想在熊猫里玩玩约会,所以试一下。我对Pandas很陌生——我发现通过创建一个附加列来使用日期索引是最简单的。毫无疑问,有人可以做得更简洁 我认为以下内容符合您的要求:
from datetime import *
import pandas as pd
from_day = 15
plus_days = 18
df = pd.DataFrame.from_records([
(datetime(2013, 2, 16),2),
(datetime(2013, 2, 18),5), #
(datetime(2013, 2, 19),6), #
(datetime(2013, 3, 1), 7), #
(datetime(2013, 3, 17),1),
(datetime(2013, 3, 20),3), #
(datetime(2013, 3, 25),4), #
(datetime(2013, 4, 1), 8)],
columns=["time_slot", "data"],
index=["time_slot"])
df.insert(0,'days',df.index)
df.days = df.days.apply(lambda x: x.day)
然后,您可以使用以下命令查询数据帧:
df[(df['days']>=from_day) & (df['days'] < from_day + plus_days)].data
显然,将from_day设置为15天,再加上第18天,将始终导致从第15天开始的所有天数,但我认为这通常会起作用
使现代化
根据您的要求,将我的起始日和结束日设置为13,以下包括您希望的2013年2月1日至3日:
df.insert(0,'adjusted_day',df.index)
df.adjusted_day = df.adjusted_day.apply(lambda x: (x + timedelta(days=-plus_days)).day)
df[(df.index.day>=from_day) | ((df.adjusted_day <=from_day) & (df.adjusted_day >=from_day-plus_days))]
怎么样
df[df.index.day>=18]
它没有抓住2月的角落案件。2月18日+13天=>2月2日或3日,取决于闰年。正如陈坤的回答一样,这并不适用于2月。你的解决方案有效,可能比我的更好。最后,我选择了df.ix[df.index.day>=18 | df.index.month==3&df.index.day