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)