熊猫:时间序列中的事件标记 输出:print(df.sort_values('ID'))

您好,我正在尝试在时间序列数据上生成一个标志,以识别该事件的+ -3个时间段内的观测值。每个地方的活动日期可能有所不同。不确定如何在大熊猫中接近。任何建议都将受到欢迎。

熊猫:时间序列中的事件标记
      
    输出:print(df.sort_values('ID'))

song8615428 回答:熊猫:时间序列中的事件标记 输出:print(df.sort_values('ID'))

让我们尝试一下:

content\bin

输出:

content\API\bin
,

我们可以使用pd.merge_asof将最接近的事件“日期”带到每个“位置”中的每一行。我使用np.select来正确设置您的Flag列,因为它遵循一些奇怪的逻辑。

如果窗口重叠,则可以更改condschoices中的顺序,以赋予一个优先于另一个的优先级,而无需检查其他任何逻辑。

import pandas as pd
import numpy as np
df['Date'] = pd.to_datetime(df.Date)

# Bring closest event date to `df`. Sort ruins order,but can fix later.
df = pd.merge_asof(df.sort_values('Date'),(df.loc[df.Event.eq(1),['Place','Date']]
                      .sort_values('Date')
                      .rename(columns={'Date': 'Date_2'})),by='Place',direction='nearest',left_on='Date',right_on='Date_2')

# Find day difference,needs to be adjusted in subsequent steps
df['Flag'] = (df['Date'] - df['Date_2']).dt.days

# Fix Flag to be desired final value.
conds = [df.Flag.ge(-3) & df.Flag.lt(0),df.Flag.ge(0) & df.Flag.le(3)]
choices = [df.Flag,df.Flag+1]
df['Flag'] = np.select(conds,choices,default=0)

输出:print(df.sort_values('ID'))

    ID Place       Date  Event     Date_2  Flag
0    1     A 2019-01-01      0 2019-01-06     0
2    2     A 2019-01-02      0 2019-01-06     0
4    3     A 2019-01-03      0 2019-01-06    -3
6    4     A 2019-01-04      0 2019-01-06    -2
8    5     A 2019-01-05      0 2019-01-06    -1
10   6     A 2019-01-06      1 2019-01-06     1
12   7     A 2019-01-07      0 2019-01-06     2
15   8     A 2019-01-08      0 2019-01-06     3
17   9     A 2019-01-09      0 2019-01-06     4
18  10     A 2019-01-10      0 2019-01-06     0
1   11     B 2019-01-01      0 2019-01-04    -3
3   12     B 2019-01-02      0 2019-01-04    -2
5   13     B 2019-01-03      0 2019-01-04    -1
7   14     B 2019-01-04      1 2019-01-04     1
9   15     B 2019-01-05      0 2019-01-04     2
11  16     B 2019-01-06      0 2019-01-04     3
13  17     B 2019-01-07      0 2019-01-04     4
14  18     B 2019-01-08      0 2019-01-04     0
16  19     B 2019-01-09      0 2019-01-04     0
19  20     B 2019-01-10      0 2019-01-04     0
本文链接:https://www.f2er.com/3156498.html

大家都在问