【发布时间】:2020-07-04 08:37:19
【问题描述】:
我想将 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 |
但是,我想根据条件进行求和,即只应使用在列in_scope 中定义为True 的“in_scope”记录。注意,第一个聚合应该仍然使用整个表。简而言之,这是所需的输出:
DESIRED OUTPUT OF GROUPBY:
| id | num_records | sum_value_in_scope |
|----|-------------|--------------------|
| a | 3 | 10 |
| b | 2 | 20 |
我正在考虑将两个参数传递给 lambda 函数,但我没有成功。当然,它可以通过对过滤和未过滤的数据执行两个单独的 groupbys 并在之后将它们组合在一起来解决。但我希望有一种更短更优雅的方式。
【问题讨论】:
标签: python filter conditional-statements aggregate pandas-groupby