python - 计算 Pandas 中的日期

标签 python pandas

我有一个 pandas 数据框,其中包含事件列表。每个事件都有一个时间戳。它们按时间排序。

id      time
68851   2017-11-06 17:07:09
34067   2017-11-06 17:51:53
99838   2017-11-06 18:38:58 
81212   2017-11-06 18:47:47
34429   2017-11-06 19:01:52 

我想扩展每一行以包含过去一小时和一天内发生的事件数量。因此,上表将变为 (eil="events in last"):

id      time                   eil_hour    eli_day                   
68851   2017-11-06 17:07:09    1           1 
34067   2017-11-06 17:51:53    2           2
99838   2017-11-06 18:38:58    2           3    
81212   2017-11-06 18:47:47    3           4
34429   2017-11-06 19:01:52    3           5

如果第一个表存储在 df 中,我尝试在 Pandas 中执行此操作:

def eventsInLast(date):
    ddict = {"eil_hour": 0, "eil_minute": 0}
    #loop over timedeltas
    for c, delta in [("eil_hour",timedelta(hours=1)),("eil_minute",timedelta(minutes=1))]:
        #find number of rows with dates between current row - delta and delta
        n = ((df["time"] >= (date-delta)) & (df["time"] <= date)).sum()
        ddict[c] = n
        if n==0:
            break #break if no events in last hour, since there won't be any in last minute either
    return pd.Series(ddict)

pd.concat([df,df["time"].apply(eventsInLast)],axis=1)

问题是这非常慢,而且我正在处理一个大数据集。谁能建议一种更有效的方法来完成同样的事情?

最佳答案

试试这个

df['eil_hour'] = df.rolling('1h', on='time')['event'].sum() # sum or count??
df['eil_day'] = df.rolling('1d', on='time')['event'].sum()

关于python - 计算 Pandas 中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52938808/

相关文章:

python - 删除满足列值条件的 pandas 数据帧的初始行,同时保持列中的序列值不变

python - 在 pandas.DataFrame 中更改年份

python - 从 numpy ndarray 中提取特定数据

python - 在 3d 中绘制隐式方程

python - 获取在 Python 模块中传输的数据

python - 使用 OutOfBoundsDatetime 儒略历到公历日期

python - 从字符串中获取关键字列表

python - Jinja2 异常处理

python - 使用 Amazon EC2 自动缩放 Python Celery

python - 在 Google App Engine 上分析/优化网站的最佳方式