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:
- Groupby 列 A 和 B;
- 当C列小于等于6时,将D列对应的值相加;
- 将这些求和值赋给 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.transform
与 sum
.
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
我有以下 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:
- Groupby 列 A 和 B;
- 当C列小于等于6时,将D列对应的值相加;
- 将这些求和值赋给 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.transform
与 sum
.
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