gpt4 book ai didi

Python Pandas groupby : how to do conditional aggregation dependent on other column

转载 作者:行者123 更新时间:2023-12-04 10:21:38 25 4
gpt4 key购买 nike

我想将 Panda 的 groupby 与多个聚合函数一起使用,但还包括每个聚合的条件语句。想象一下以这些数据为例:

df = pd.DataFrame({
'id': ['a', 'a', 'a', 'b', 'b'],
'type': ['in_scope', 'in_scope', 'exclude', 'in_scope', 'exclude'],
'value': [5, 5, 99, 20, 99]
})
INPUT DATA:
| id | in_scope | value |
|----|----------|-------|
| a | True | 5 |
| a | True | 5 |
| a | False | 99 |
| b | True | 20 |
| b | False | 99 |

我想做一个像这样的 Pandas groupby:
df.groupby('id').agg(
num_records=('id', 'size'),
sum_value=('value', np.sum)
)
OUTPUT OF SIMPLE GROUPBY:
| id | num_records | sum_value |
|----|-------------|-----------|
| a | 3 | 109 |
| b | 2 | 119 |

但是,我想根据条件进行求和,即只有定义为 True 的“in_scope”记录。在栏目 in_scope应该使用。请注意,第一个聚合仍应使用整个表。简而言之,这是所需的输出:
DESIRED OUTPUT OF GROUPBY:
| id | num_records | sum_value_in_scope |
|----|-------------|--------------------|
| a | 3 | 10 |
| b | 2 | 20 |

我正在考虑将两个参数传递给 lambda 函数,但我没有成功。当然,可以通过对过滤和未过滤的数据执行两个单独的分组,然后将它们组合在一起来解决。但我希望有一种更短、更优雅的方式。

最佳答案

更新的答案:创建一个临时列,该列仅在 type 时才包含值是 in_scope ,然后聚合:

(
df.assign(temp=np.where(df["type"] == "in_scope", df["value"], None))
.groupby("id", as_index=False)
.agg(num_records=("type", "size"), sum_value=("temp", "sum"))
)

id num_records sum_value
a 3 10
b 2 20

关于Python Pandas groupby : how to do conditional aggregation dependent on other column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60821065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com