【问题标题】:group by python DataFrameGroupBy and sum partly column variables before and after the threshold按python DataFrameGroupBy分组并在阈值之前和之后对部分列变量求和
【发布时间】:2021-11-08 23:06:07
【问题描述】:

我有 3 列,第一列是分类值,一列是数字,另一列是和否,如下所示:

Column1 Column2 Column3
A       2       yes
A       1       yes
A       3       no
A       2       yes
A       5       yes
B       3       yes
B       1       no
B       2       yes
B       5       yes

我想创建新列来计算 column2 值的总和,直到 column3 等于 no。然后继续重新启动 column2 元素的总和,直到看到 group by column1 的任何“否”。我想要:

Column1 Column2 Column3 Column4
A       2       yes     3       ( sum of column2 elements until no for group A)
A       1       yes     3
A       3       no      no
A       2       yes     7
A       5       yes     7
B       3       yes     3
B       1       no      no
B       2       yes     7
B       5       yes     7

如何为 python 数据框创建这个新列?

非常感谢你的时间!

【问题讨论】:

    标签: python dataframe


    【解决方案1】:

    首先在Column1cumsumnos 组中找到连续的yes。然后将 Column2 按此新分组的组相加,将 Column1yes 的行相加。

    s = df.Column3.groupby(df.Column1).apply(lambda x: x.eq('no').cumsum())
    df['Column4'] = df[df.Column3 == 'yes'].groupby(['Column1', s])['Column2'].transform('sum')
    df.fillna('no')
    

    结果

      Column1  Column2 Column3 Column4
    0       A        2     yes       3
    1       A        1     yes       3
    2       A        3      no      no
    3       A        2     yes       7
    4       A        5     yes       7
    5       B        3     yes       3
    6       B        1      no      no
    7       B        2     yes       7
    8       B        5     yes       7
    

    为了更好地了解这是如何工作的:这些是​​在 s 中创建的组

    df[['Column3','Column1']].assign(newGroups = s)
    

    输出

      Column3 Column1  newGroups
    0     yes       A          0
    1     yes       A          0
    2      no       A          1
    3     yes       A          1
    4     yes       A          1
    5     yes       B          0
    6      no       B          1
    7     yes       B          1
    8     yes       B          1
    

    【讨论】:

      猜你喜欢
      • 2017-02-14
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      相关资源
      最近更新 更多