【问题标题】:group dataframe if the column has the same value in consecutive order如果列在连续顺序中具有相同的值,则对数据框进行分组
【发布时间】:2022-11-16 13:17:53
【问题描述】:

嗨,我不知道如何描述我的问题,但假设我有一个如下所示的数据框:

如果我有连续的治疗,我想将我的资产分配给一组。如果后面有两个连续的资产没有处理,那么我们仍然可以将它们分配到同一组。但是,如果有两个以上的资产未经处理,则这些资产(未经处理)将具有空组。下一个经过处理的资产将被分配到一个新组

【问题讨论】:

  • 将图像发布为文本。

标签: pandas dataframe


【解决方案1】:

您可以使用 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

【讨论】:

    猜你喜欢
    • 2020-05-03
    • 2012-09-12
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    相关资源
    最近更新 更多