【发布时间】:2022-11-16 13:17:53
【问题描述】:
嗨,我不知道如何描述我的问题,但假设我有一个如下所示的数据框:
如果我有连续的治疗,我想将我的资产分配给一组。如果后面有两个连续的资产没有处理,那么我们仍然可以将它们分配到同一组。但是,如果有两个以上的资产未经处理,则这些资产(未经处理)将具有空组。下一个经过处理的资产将被分配到一个新组
【问题讨论】:
-
将图像发布为文本。
嗨,我不知道如何描述我的问题,但假设我有一个如下所示的数据框:
如果我有连续的治疗,我想将我的资产分配给一组。如果后面有两个连续的资产没有处理,那么我们仍然可以将它们分配到同一组。但是,如果有两个以上的资产未经处理,则这些资产(未经处理)将具有空组。下一个经过处理的资产将被分配到一个新组
【问题讨论】:
您可以使用 rolling 检查在最后 N 次出现中是否至少有一个 Y。
我提供了两个选项,具体取决于不标记前导/尾随 N 是否重要:
# maximal number of days without treatment
# to remain in same group
N = 2
m = df['Treatment'].eq('Y')
group = (m.rolling(N+1, min_periods=1).max()
.eq(0).cumsum().add(1)
)
df['group'] = group
# don't label leading/trailing N
m1 = m.groupby(group).cummax()
m2 = m[::-1].groupby(group).cummax()
df['group2'] = group.where(m1&m2)
print(df)
输出:
Treatment group group2
0 Y 1 1.0
1 Y 1 1.0
2 Y 1 1.0
3 N 1 1.0
4 N 1 1.0
5 Y 1 1.0
6 Y 1 1.0
7 Y 1 1.0
8 N 1 NaN
9 N 1 NaN
10 N 2 NaN
11 Y 2 2.0
12 Y 2 2.0
13 Y 2 2.0
14 Y 2 2.0
15 N 2 NaN
【讨论】: