我想将紧密发生的事件分组到父事件中。
一个例子是这样的:
import pandas as pd
df = pd.DataFrame(
[
['2020-01-01 10:00', '1'],
['2020-01-01 10:01', '2'],
['2020-01-01 10:02', '3a'],
['2020-01-01 10:02', '3b'],
['2020-01-01 10:30', '4'],
['2020-01-01 10:50', '5'],
['2020-01-01 10:54', '6'],
['2020-01-01 10:55', '7'],
], columns=['event_time', 'event_id']
)
df['event_time'] = pd.to_datetime(df['event_time'])
在上面的窗口大小为 1 分钟的示例中,我想要的是每个事件的 +- 1 分钟内发生的所有其他事件的列表。
所以像这样:
df = pd.DataFrame(
[
['2020-01-01 10:00', '1', ['2']],
['2020-01-01 10:01', '2', ['1','3a','3b']],
['2020-01-01 10:02', '3a', ['2','3b']],
['2020-01-01 10:02', '3b', ['3a', '2'],
['2020-01-01 10:30', '4', None],
['2020-01-01 10:50', '5', None],
['2020-01-01 10:54', '6', ['7']],
['2020-01-01 10:55', '7', ['6']],
], columns=['event_time', 'event_id', 'related_event_id_list']
)
我几乎能够接近 pandas merge_asof:
pd.merge_asof(df,df, on="event_time", tolerance=pd.Timedelta("1m"), allow_exact_matches=False, direction='nearest')
但它似乎只想合并到一个最近的事件,而不是某种选项或方式来合并每行容差内的所有事件(显然只是在我的结果中获得更多行,因此它更像是范围)。
我认为对这样的时间序列事件进行分组一定是相当常见的,但在 Pandas 中找不到任何明显的函数来做到这一点,或者也许我错过了一些东西。
一如既往,如果我可以避免的话,尽量避免自己通过循环或类似的方式编写代码:)
holdtom
相关分类