мой набор данных:
agg x y
1 1 2
1 2 3
1 2 1
1 4 5
ожидаемый результат:
X_CNT X_CNT0 Y_MIN Y_MAX Y_SUM
agg
1 4 0 1 5 11
Я пытаюсь создать следующий запрос sql в PANDAS:
CREATE TABLE summ AS
SELECT Sum (CASE
WHEN x != 0 THEN 1
ELSE 0
END) AS X_CNT,
Sum (CASE
WHEN x = 0 THEN 1
ELSE 0
END) AS X_CNT0,
Min (y) AS Y_MIN,
Max (y) AS Y_MAX,
Sum (y) AS Y_SUM
FROM df
Я подумал о следующем:
df1=df.groupby('agg').agg({'x':lambda val: (val != 0).sum()}).rename(columns={'x':'X_CNT'})
df2=df.groupby('agg').agg({'x':lambda val: (val == 0).sum()}).rename(columns={'x':'X_CNT0'})
df3=df.groupby('agg').agg({'y':'min'}).rename(columns={'y':'Y_MIN'})
df4=df.groupby('agg').agg({'y':'max'}).rename(columns={'y':'Y_MAX'})
df5=df.groupby('agg').agg({'y':'sum'}).rename(columns={'y':'Y_SUM'})
dfs=[df1,df2,df3,df4,df5]
from functools import reduce
summ = reduce(lambda left,right: pd.merge(left,right,how='inner',on='agg'), dfs)
Есть ли более эффективный способ / лучшие практики для выполнения этого?