gpt4 book ai didi

python - 如果条件不满足,则单独对数据进行分组,Cnd :true assign grp 1; cnd false :assign group 2;cnd true: assign group 3

转载 作者:行者123 更新时间:2023-12-01 06:52:28 25 4
gpt4 key购买 nike

#input 
|--IDs-|--Value-|
|--da1-|--100---|
|--da2-|---80---|
|--da3-|--200---|
|--da4-|--300---|
|--da5-|--100---|
|--da6-|--100---|
|--da7-|--500---|
|--da8-|---74---|

Assuming the data is sorted by date ASC, I need following results. if the data is not sorted. I need to sort it first and then apply the logic as mentioned.

# Desired output for condition Value> 100

|--IDs-|--Value--|--Group--|
|--da1-|--100---|----1----|
|--da2-|---80---|----1----|
|--da3-|--200---|----2----|
|--da4-|--300---|----2----|
|--da5-|--100---|----3----|
|--da6-|--100---|----3----|
|--da7-|--500---|----4----|
|--da8-|---74---|----5----|


我尝试使用 for 循环并通过比较每个数据来更新组。这在性能方面并不高效。我想知道是否有更简单、更快的方法来做到这一点。我正在尝试用 python 或 SQL 来实现这一点,这两种方法都很有效。在下面的代码中,我每次都会更新 pandas 数据框。

prev_cond = 'Cr'
group = 0
for i in range(len(data)):
if data.iloc[i,1] > 100:
cur_cond = 'Tr'
if cur_cond == prev_cond:
group = group
else:
group = group+1
data['Group'][i] = group
prev_cond = cur_cond
else:
cur_cond = 'Fl'
if cur_cond == prev_cond:
group = group
else:
group = group+1
data['Group'][i] = group
prev_cond = cur_cond

最佳答案

我认为您需要 lag() 和累积总和中的一些条件逻辑:

select t.*,
sum(case when prev_value > 100 and value > 100 then 0
when prev_value <= 100 and value <= 100 then 0
else 1
end) over (order by id) as grp
from (select t.*,
lag(value) over (order by id) as prev_value
from t
) t;

这是一个数据库<> fiddle 。

关于python - 如果条件不满足,则单独对数据进行分组,Cnd :true assign grp 1; cnd false :assign group 2;cnd true: assign group 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58937173/

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