Ich habe SQL-Anweisung wie folgt aus:Python Pandas: case-Anweisung in agg Funktion
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
ich Umschreiben Sie sich mit der Pandas versuchen: zuerst werde ich Datenrahmen für "innere" Tabelle erstellen:
filtered_data = data.where(data['alloc_date'] <= analysis_date)
dann werde ich Gruppe diese Daten
grouped = filtered_data.groupby(['id','connected_date'])
Aber was ich habe zum Filtern jeder Spalte verwenden und verwende max/sum darauf.
habe ich versucht, so etwas wie dieses:
`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'])`
und etwas ähnliches für Rate
Okay, lassen Sie uns Bild, dass die Anzahl der Klicks aussieht (.023, 1.2, 0.4, 2.4, 2.1, .1, .2) und U wollen Summe aber nicht wie (.023 +1,2 und etc) aber wenn number_of_clicks <1 dann 0 else 1 und danach summe berechnen (1 + 1 + 0 + 1 ..) – gostin
Dann vor deiner groupby etwas tun wie: 'df ['number_of_clicks'] = df ['number_of_clicks']> = 1' . Sie erhalten die 'Serie' von booleschen Werten (die auch 0 und 1 zu python sind), und die Summe in groupby gibt Ihnen, was Sie wollen. – ysearka