我有这样的SQL语句:

select id
        , avg(case when rate=1 then rate end) as "P_Rate"
        , stddev(case when rate=1 then rate end) as "std P_Rate",
        , avg(case when f_rate = 1 then f_rate else 0 end) as "A_Rate"
        , stddev(case when f_rate = 1 then f_rate else 0 end) as "std A_Rate"
from (
 select id, connected_date,payment_type,acc_type,
  max(case when is s_rate > 1 then 1 else 0 end) / count(open) as rate
  sum(case when is hire_days <= 5 and paid>1000 then 1 else 0 end )/count(open) as f_rate
from analysis_table where alloc_date <= '2016-01-01' group by 1,2
) a group by id


我试图用熊猫重写:
首先,我将为“内部”表创建数据框:

filtered_data = data.where(data['alloc_date'] <= analysis_date)


然后我将这些数据分组

grouped = filtered_data.groupby(['id','connected_date'])


但是我必须使用它来过滤每列并在其上使用max / sum。

我尝试过这样的事情:

`def my_agg_function(hire_days,paid,open):
     r_arr = []
     if hire_days <= 5 and paid > 1000:
        r_arr.append(1)
     else:
        r.append(0)
     return np.max(r_arr)/len(????)
inner_table['f_rate'] = grouped.agg(lambda row: my_agg_function(row['hire_days'],row['paid'],row['open'])`


和利率相似

最佳答案

您应该在问题中放一些DataFrame,以使其更易于回答。

根据您的需要,您可能需要使用groupby数据框的agg方法。假设您具有以下数据框:

    connected_date  id      number_of_clicks    time_spent
0   Mon             matt    15                  124
1   Tue             john    13                  986
2   Mon             matt    48                  451
3   Thu             jack    68                  234
4   Sun             john    52                  976
5   Sat             sabrina 13                  156


您希望获得用户每天花费的时间与单个会话中的最大点击次数之和。然后,您可以使用groupby这样:

df.groupby(['id','connected_date'],as_index = False).agg({'number_of_clicks':max,'time_spent':sum})


输出:

    id      connected_date  time_spent  number_of_clicks
0   jack    Thu             234         68
1   john    Sun             976         52
2   john    Tue             986         13
3   matt    Mon             575         48
4   sabrina Sat             156         13


请注意,我仅通过as_index=False来简化输出。

关于python - Python Pandas:agg函数中的case语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38247763/

10-13 07:41