Pandas: получить abs() mean() в агрегатной функции

#python-3.x #pandas #pandas-groupby #dask #dask-dataframe

#python-3.x #pandas #pandas-groupby #dask #dask-фрейм данных

Вопрос:

Из документов можно создать .aggregate такой dataframe.groupby объект, как этот:

 df = pd.DataFrame([[1, 2, 3],
                   [-4, 5, 6],
                   [7, 8, 9],
                   [np.nan, np.nan, np.nan]],
                  columns=['A', 'B', 'C'])
  

и затем aggregate вот так:

 my_agg = {'A' : ['mean', 'min'], 'B' : ['mean', 'max']}
df.agg(my_agg)
  

Это хорошо, но я хотел бы использовать здесь столбец abs(np.mean) of A . Возможно ли определить это как часть my_agg ? Каким было бы решение для dask?

Ответ №1:

Да, мы можем передать lambda

 my_agg = {'A' : ['mean', 'min', lambda x : abs(x.mean())], 'B' : ['mean', 'max']}
df.agg(my_agg)
Out[194]: 
                 A    B
<lambda>  1.333333  NaN
max            NaN  8.0
mean      1.333333  5.0
min      -4.000000  NaN
  

Комментарии:

1. Да, это идеально работает для pandas.DataFrame . Для dask это дает ValueError: unknown aggregate lambda результат. Похоже, что это lambda не может быть использовано в этом месте.

2. @gies0r попробуйте с помощью определения вашей функции ~ и agg с помощью вашей функции

3. Dask не был частью вашего первоначального вопроса. Вы могли бы отредактировать или задать заново.

4. @mdurant это было в нем в качестве тега в исходном вопросе. Я сделал короткое обновление, чтобы также запросить dask.