python - 比较不同、不相等的数据集中的日期并为给定日期范围添加值

标签 python pandas python-datetime date-comparison

我正在尝试比较两个时间序列数据集。其中一个数据集具有一组时间范围(事件开始和结束时间)和一个值。第二个数据集的时间范围(频率 = 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

关于python - 比较不同、不相等的数据集中的日期并为给定日期范围添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55229850/

相关文章:

python - Fedora 19 Pyclewn 找不到GDB版本

Python - 检查值是否存在于两个单独的列表中

python - queue.Queue 上的多路复用?

python - Pandas :在数据框中创建一个新列,该列是滚动窗口的函数

python - 组合不同的列

python - AttributeError: 'TimedeltaProperties' 对象没有属性 'minute'

python - 如何在列表中循环更多次 python 中的列表大小?

Python Pandas,删除列中增加的行

python - 有没有一种简单的方法可以将 ISO 8601 持续时间转换为 timedelta?

python - 类型错误 : '>' not supported between instances of 'datetime.datetime' and 'str'