Python 如何检查熊猫的时间范围?

Python 如何检查熊猫的时间范围?,python,pandas,Python,Pandas,我有这样一个数据帧: time 2018-06-25 20:42:00 2016-06-26 23:51:00 2017-05-34 12:29:00 2016-03-11 10:14:00 现在我创建了一个这样的专栏 df['isEIDRange']=0 比如说,开斋节是在2018年6月15日 所以我想在isEIDRange列中填充1值。如果日期在2018年6月10日至2018年6月20日之间(EID前5天和EID后5天) 我怎么做 什么样的 df.loc[(df.

我有这样一个数据帧:

time             
2018-06-25 20:42:00
2016-06-26 23:51:00
2017-05-34 12:29:00
2016-03-11 10:14:00
现在我创建了一个这样的专栏
df['isEIDRange']=0

比如说,开斋节是在2018年6月15日

所以我想在
isEIDRange
列中填充
1
值。如果日期在2018年6月10日至2018年6月20日之间(EID前5天和EID后5天)

我怎么做

什么样的


df.loc[(df.time>6月15日-5天)和(df.time<6月15日+5天),“isEIDRange”]=1

您可以使用熊猫日期范围:

eid = pd.date_range("15/10/2019", "20/10/2019")
df = pd.DataFrame({"dates": pd.date_range("13/10/2019", "20/10/2019")})

df["eid"] = 0
df.loc[df["dates"].isin(eid), "eid"] = 1
和输出:

    dates      eid
0   2019-10-13  0
1   2019-10-14  0
2   2019-10-15  1
3   2019-10-16  1
4   2019-10-17  1
5   2019-10-18  1
6   2019-10-19  1
7   2019-10-20  1

您可以使用
loc
np。其中

import numpy as np
df['isEIDRange'] = np.where((df['time'] > '2018-06-10') & (df['time'] < '2018-06-20'),1,df['isEIDRange']
将numpy导入为np
df['isEIDRange']=np.其中((df['time']>'2018-06-10')和(df['time']<'2018-06-20'),1,df['isEIDRange']
这意味着,当列
time
介于2018-06-10和2018-06-20之间时,列
isEIDRange
将等于1,否则它将保留其原始值(0)。

对测试值使用函数,将掩码转换为整数:

df['isEIDRange'] = df['time'].between('2018-06-10', '2018-06-20').astype(int)
如果需要动态解决方案:

df = pd.DataFrame({"time": pd.date_range("2018-06-08", "2018-06-22")})
#print (df)

date = '15 June 2018'
d = pd.to_datetime(date)
diff = pd.Timedelta(5, unit='d')

df['isEIDRange1'] = df['time'].between(d - diff, d + diff).astype(int)
df['isEIDRange2'] = df['time'].between(d - diff, d + diff, inclusive=False).astype(int)
print (df)
         time  isEIDRange1  isEIDRange2
0  2018-06-08            0            0
1  2018-06-09            0            0
2  2018-06-10            1            0
3  2018-06-11            1            1
4  2018-06-12            1            1
5  2018-06-13            1            1
6  2018-06-14            1            1
7  2018-06-15            1            1
8  2018-06-16            1            1
9  2018-06-17            1            1
10 2018-06-18            1            1
11 2018-06-19            1            1
12 2018-06-20            1            0
13 2018-06-21            0            0
14 2018-06-22            0            0
或通过以下方式设置值:


很好,我已经把不同之处编码好了,我的回答会比你的更灵活:)太好了。谢谢。另一个离题的问题是:耶兹雷尔,熊猫身上有类似于cumlast()的东西吗?就像cumsum()?@johndoe-不,只是
df['isEIDRange'] = np.where(df['time'].between(d - diff, d + diff), 1, 0)