Для моего анализа мне нужно повторно использовать пользовательские агрегаты для RPC (доход за клик).Мне нужно применить их к группам, которые могут иметь крайние случаи, когда знаменатель равен 0.
Приведенный ниже метод выдает предупреждение и приводит к агрегации как inf
, тогда как в моем контексте NA
более уместно.
Вероятно, это очень простой вопрос, но кто-то может объяснить, пожалуйста:
- , как изменить
aggfunc
, чтобы избежать деления на ноль.(не обращаясь за помощью в том, как изменить или привести значения) - вызывает ли это предупреждение какие-либо проблемы с производительностью или непредвиденное поведение?
- в целом, как вы добавляете логические вычисления на уровне строк в
aggfunc
?Как бы вы добавили столбец, который вычисляет стандартное значение RPC в каждой группе?
print(pd.__version__)
clicks = [5, 8, 6, 6, 0, 4, 3, 7, 9, 4]
rev = [2.96, 3.94, 4.83, 2.94, 4.53, 4.66, 3.5 , 4.56, 2.41, 3.77]
group = ['A', 'C', 'C', 'B', 'F', 'D', 'C', 'D', 'A', 'B']
df = pd.DataFrame({'group':group,'clicks':clicks,'rev':rev})
def aggfunc(row):
d = {
'rpc' : row['rev'].sum() / row['clicks'].sum(),
'rev' : row['rev'].sum(),
'clicks' : row['clicks'].sum()
}
return pd.Series(d)
print(df.groupby('group').apply(aggfunc))
0.23.4
rpc rev clicks
group
A 0.383571 5.37 14.0
B 0.671000 6.71 10.0
C 0.721765 12.27 17.0
D 0.838182 9.22 11.0
F inf 4.53 0.0
/Users/jselenkow/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:9: RuntimeWarning: divide by zero encountered in double_scalars
if __name__ == '__main__':
Примечание: для большего контекста - я знаю, что вы можете делать суммы без использования функции применения,но я считаю этот метод полезным и удобным, поскольку я могу определить, какие столбцы сохранить