gpt4 book ai didi

python - group-by + case when 等价

转载 作者:太空宇宙 更新时间:2023-11-04 03:33:26 27 4
gpt4 key购买 nike

要选择:

select
user_id,
max(case when value > 0 then timestamp else 0 end) as max_timestamp_when_value_is_positive
from df
group by user_id

什么是正确的聚合方式?

groupped = raw_data.groupby('user_id')
res = groupped.agg({<how-to-do-described-aggregation?>})

更新解释和示例。

In [2]: df = pd.DataFrame({'user_id': [1, 1, 1, 2, 2, 3, 3, 3, 3],
'timestamp': [100, 200, 300, 10, 110, 10, 110, 210, 250],
'value': [0, 1, 0, 0, 0, 0, 10, 0, 1]})

In [3]: groupped = df.groupby('user_id')

In [4]: res = groupped.agg({'timestamp': [min, max],
'value': lambda x: sum(x > 0),
<described-magic>})

In [5]: res
Out[5]:
timestamp value <...magic...>
min max <lambda>
user_id
1 100 300 1 200
2 10 110 0 0
3 10 250 2 210

魔法是我想要的。

最佳答案

创建一个新列 positive_value_timestamp 作为

df['positive_value_timestamp'] = df.timestamp * df.value.apply(lambda x: 1 if x > 0 else 0)

分组时,取该列的max

res = df.groupby('user_id').agg(
{
'timestamp': [min, max],
'value': sum,
'positive_value_timestamp': max
})

关于python - group-by + case when 等价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30167822/

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