比较不同的、不相等的数据集中的日期并为给定的日期范围添加值
Compare dates in different, unequal data sets and adding value for a given date range
我正在尝试比较两个时间序列数据集。其中一个数据集具有一组时间范围(事件开始和结束时间)和一个值。第二个数据集的时间范围(频率 = 1 小时)从开始时间的最小值到数据集 1 的最大结束时间。我想为那些时间范围匹配的人添加一个值。
示例:
数据集 1,作为 pandas 数据框导入并解析日期:
data1:
Start_Time | End_Time | Value
01/01/2017 13:00 01/01/2017 16:00 68
01/02/2017 00:00 01/02/2017 08:00 70
01/03/2017 10:00 01/03/2017 17:00 90
数据集 2 是使用 pandas date_range
创建的
data2['date'] = pd.date_range(start=data1['Start_Time'].min(),
end = data1['End_Time'].max(), freq = '1H')
我尝试使用np.where
找到满足条件
的日期范围
注意:两个DataFrame大小不等
data2['Value'] = np.where((data1['Start_Time']>=data2['date'][data1.index])
& (data1['End_time']<=data2['date'][data1.index]),
data1['Value'], 0)
我需要的 data2 数据帧是
Date | Value
01/01/2017 13:00 68
01/01/2017 14:00 68
01/01/2017 15:00 68
01/01/2017 16:00 68
01/01/2017 17:00 0
01/01/2017 18:00 0
.
.
.
.
01/02/2017 00:00 70
01/02/2017 01:00 70
01/02/2017 02:00 70
and so on.
我正在使用 numpy
广播,它是 o(m*n) 方法
#data1.Start_Time=pd.to_datetime(data1.Start_Time)
#data1.End_Time=pd.to_datetime(data1.End_Time)
s1=data1.Start_Time.values
s2=data1.End_Time.values
s=data2.date.values
a=np.dot((s[:,None]>=s1)&(s[:,None]<=s2),data1.Value.values)
Out[639]:
array([68, 68, 68, 68, 0, 0, 0, 0, 0, 0, 0, 70, 70, 70, 70, 70, 70,
70, 70, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 90, 90, 90,
90, 90], dtype=int64)
data2['Value']=a
我正在尝试比较两个时间序列数据集。其中一个数据集具有一组时间范围(事件开始和结束时间)和一个值。第二个数据集的时间范围(频率 = 1 小时)从开始时间的最小值到数据集 1 的最大结束时间。我想为那些时间范围匹配的人添加一个值。
示例:
数据集 1,作为 pandas 数据框导入并解析日期:
data1:
Start_Time | End_Time | Value
01/01/2017 13:00 01/01/2017 16:00 68
01/02/2017 00:00 01/02/2017 08:00 70
01/03/2017 10:00 01/03/2017 17:00 90
数据集 2 是使用 pandas date_range
创建的data2['date'] = pd.date_range(start=data1['Start_Time'].min(),
end = data1['End_Time'].max(), freq = '1H')
我尝试使用np.where
找到满足条件
注意:两个DataFrame大小不等
data2['Value'] = np.where((data1['Start_Time']>=data2['date'][data1.index])
& (data1['End_time']<=data2['date'][data1.index]),
data1['Value'], 0)
我需要的 data2 数据帧是
Date | Value
01/01/2017 13:00 68
01/01/2017 14:00 68
01/01/2017 15:00 68
01/01/2017 16:00 68
01/01/2017 17:00 0
01/01/2017 18:00 0
.
.
.
.
01/02/2017 00:00 70
01/02/2017 01:00 70
01/02/2017 02:00 70
and so on.
我正在使用 numpy
广播,它是 o(m*n) 方法
#data1.Start_Time=pd.to_datetime(data1.Start_Time)
#data1.End_Time=pd.to_datetime(data1.End_Time)
s1=data1.Start_Time.values
s2=data1.End_Time.values
s=data2.date.values
a=np.dot((s[:,None]>=s1)&(s[:,None]<=s2),data1.Value.values)
Out[639]:
array([68, 68, 68, 68, 0, 0, 0, 0, 0, 0, 0, 70, 70, 70, 70, 70, 70,
70, 70, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 90, 90, 90,
90, 90], dtype=int64)
data2['Value']=a