pandas - Pandas:时间序列中的事件标记
解决方案
我们试试看:
import pandas as pd
import numpy as np
d = pd.date_range('2019-01-01', '2019-01-10', freq='D')
df = pd.DataFrame({'ID':np.arange(1,21)
,'Place':['A']*10+['B']*10
,'Date':d.to_list() * 2
,'event':[0]*5+[1]+[0]*7+[1]+[0]*6
,'Flag':[0,0,-3,-2,-1,1,2,3,4,0,-3,-2,-1,
1,2,3,4,0,0,0]},
index = np.arange(1,21))
n=3
s = df['event'].rolling(n*2+1, center=True, min_periods=1).max()
s = s.cumsum()
l = ((s - s.where(s.duplicated()).ffill())).fillna(0)
l.update(l[l>n]+1)
df['Flag'] = (l - n-1).where(l.gt(0), 0)
print(df)
输出:
ID Place Date event Flag
1 1 A 2019-01-01 0 0.0
2 2 A 2019-01-02 0 0.0
3 3 A 2019-01-03 0 -3.0
4 4 A 2019-01-04 0 -2.0
5 5 A 2019-01-05 0 -1.0
6 6 A 2019-01-06 1 1.0
7 7 A 2019-01-07 0 2.0
8 8 A 2019-01-08 0 3.0
9 9 A 2019-01-09 0 4.0
10 10 A 2019-01-10 0 0.0
11 11 B 2019-01-01 0 -3.0
12 12 B 2019-01-02 0 -2.0
13 13 B 2019-01-03 0 -1.0
14 14 B 2019-01-04 1 1.0
15 15 B 2019-01-05 0 2.0
16 16 B 2019-01-06 0 3.0
17 17 B 2019-01-07 0 4.0
18 18 B 2019-01-08 0 0.0
19 19 B 2019-01-09 0 0.0
20 20 B 2019-01-10 0 0.0
推荐阅读
- python - 来自 Tkinter 条目的打印数据不起作用
- graphql - GraphQl 联合输入类型
- java - 如何在Java中获取多维数组的索引?
- c++ - 如何让 clang 格式优先于分解函数参数而不是将函数调用放在单独的行上
- python - 如何在python中解压缩'zg-files'输出文件
- reactjs - React Hook 表单和输入类型文件
- django - 将应用程序添加到 settings.py 的不同方法
- html - 为与 Angular 框架位于同一文件夹中的 HTML 文件中创建的 HTML 文件创建链接
- visual-studio-code - 添加导入语句中的 vs 代码快捷方式或插件
- python - 如何根据Python中的列标题值选择excel列