Предположим, что кадр данных df со столбцами a, b, c, d.Я знаю способ определения функции для агрегирования значений в Panda, например:
def my_agg(x):
names = {
'a_Total': x['a'].sum(),
'b_Mean': x['b'].mean()
}
return pd.Series(names, index=['a_Total','b_Mean'])
d_aggregate = df.groupby(['c','d']).apply(my_agg)
То, что я ищу, - это способ подсчета итоговых значений или средних значений a, b соответственно на основе выборочных значений в столбце 'c'или' d '.
Пример данных:
df=pd.DataFrame({"a":[10,20,30,40],
"b":[1,2,3,4],
"c":[c1,c1,c1,c2],
"d":[100,200,300,400]})
Моя агрегатная функция:
def my_agg91(x):
names = {
'Sum_a': x['a'].sum(),
'Mean_b': x['b'].mean()}
return pd.Series(names, index=['Sum_a','Mean_b'])
df2= df.groupby(['c']).apply(my_agg91)
, которая дает мне:
Sum_a Mean_b
c
c1 60.0 2.0
c2 40.0 4.0
Что я хочу: Сумма «a» для «d» <250 и среднее значение «b» для «d»> 250 (в одном кадре данных), пожалуйста, предложите изменения в функции для получения вывода:
Sum_a Mean_b
c
c1 30.0 3.0
c2 0.0 4.0