Pandas 多个 groupby 和 sum if 条件

Pandas multiple groupby and sum if conditions

我有以下 table:

    A   B   C   D
75987   1   0   0
75987   1   1   1
75987   2   1   1
75987   2   2   1
75987   2   6   4
75987   1   6   2
75987   1   6   1
59221   2   18  4
59221   1   18  0
59221   2   18  1

我正在尝试根据以下条件创建列 E:

  1. Groupby 列 A 和 B;
  2. 当C列小于等于6时,将D列对应的值相加;
  3. 将这些求和值赋给 E 列

我希望 E 列中的值如下所示:

   A    B   C   D   E
75987   1   0   0   4
75987   1   1   1   4
75987   2   1   1   6
75987   2   2   1   6
75987   1   6   2   4
75987   1   6   1   4
75987   2   6   4   6
59221   2   18  4   0
59221   1   18  0   0
59221   2   18  1   0

本论坛提供了关于如何实施 groupby、布尔索引和 .query 以解决类似问题的建议,但我似乎无法调整它们以使其按预期工作。 例如,但还有很多其他我也尝试过。

我的以下尝试似乎合乎逻辑,但我仍然遇到困难。

df['E'] = np.where(df.groupby(['A','B'])(['C'] <= 6))['D'].transform('sum')

这是一种可行的方法,类似于您的尝试。这个想法是将 D 中的值替换为 0 where C 列超过 6。然后 groupby.transformsum.

df['E'] = (
    df['D'].where(df['C'].le(6), other=0)
      .groupby([df['A'], df['B']])
      .transform(sum)
)
print(df)
#        A  B   C  D  E
# 0  75987  1   0  0  4
# 1  75987  1   1  1  4
# 2  75987  2   1  1  6
# 3  75987  2   2  1  6
# 4  75987  2   6  4  6
# 5  75987  1   6  2  4
# 6  75987  1   6  1  4
# 7  59221  2  18  4  0
# 8  59221  1  18  0  0
# 9  59221  2  18  1  0