pandas 基于滚动窗口中的值创建新列

lf5gs5x2  于 2023-03-11  发布在  其他
关注(0)|答案(1)|浏览(101)

我有一个带有DateTime索引的DataFrame和一个包含整数的列(在本例中,它只包含0和1):

df = {
    "date": pd.date_range(start="2010-01-01 12:00", end="2010-01-01 12:05", freq="T"),
    "values": [1, 0, 0, 0, 1, 0]
}
date                    values
0   2010-01-01 12:00:00 1
1   2010-01-01 12:01:00 0
2   2010-01-01 12:02:00 0
3   2010-01-01 12:03:00 0
4   2010-01-01 12:04:00 1
5   2010-01-01 12:05:00 0

如果在2分钟的滚动时间窗口中有1,则返回True,否则返回False,如下所示:

date                    values
0   2010-01-01 12:00:00 True      - because the window [1, 0] contains 1
1   2010-01-01 12:01:00 False     - because the window [0, 0] does not contain 1
2   2010-01-01 12:02:00 False
3   2010-01-01 12:03:00 True
4   2010-01-01 12:04:00 True

我尝试了一个.groupby(),但没有太大的进展。

3bygqnnd

3bygqnnd1#

您可以将rolling与日期时间索引一起使用:

df['date'] = pd.to_datetime(df['date'])

out = (
 df.set_index('date')[::-1]
   .rolling('2min').max()
   .astype(bool)[::-1].reset_index()
)

或者:

out = (
   df[::-1]
   .rolling('2min', on='date').max()
   .astype({'values': bool})[::-1]
)

输出:

date  values
0 2010-01-01 12:00:00    True
1 2010-01-01 12:01:00   False
2 2010-01-01 12:02:00   False
3 2010-01-01 12:03:00    True
4 2010-01-01 12:04:00    True
5 2010-01-01 12:05:00   False

相关问题