Pandas переименование с помощью dict устарело - PullRequest
0 голосов
/ 22 января 2020

Работа через это: https://medium.com/@wangyuw / data-reshaping-with- pandas -explained-80b2f51f88d2

Все работает, но следующая строка кода генерирует предупреждение:

agg = long_df.reset_index().groupby(['RegionVariable', 'EXP'])[features].agg({'count': len, 'mean': np.mean})

Предупреждение, которое оно создает:

FutureWarning: using a dict with renaming is deprecated and will be removed
in a future version.

For column-specific groupby renaming, use named aggregation

    >>> df.groupby(...).agg(name=('column', aggfunc))

  return super().aggregate(arg, *args, **kwargs)

Я попытался «исправить» это с помощью:

agg = long_df.reset_index().groupby(['RegionVariable', 'EXP'])[features].agg(name=(('count', len), ('mean', np.mean)))

Но я получить эту ошибку:

KeyError: "Column '('count', <built-in function len>)' does not exist!"

Как len не может существовать во втором, но работает в первом?

Более конкретно, каков правильный синтаксис, чтобы это работало без генерации предупреждение об устаревании?

Версии:

Python: 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 21:26:53) [MSC v.1916 32 bit (Intel)]
NumPy: 1.18.1
Pandas: 0.25.3

1 Ответ

0 голосов
/ 22 января 2020

Для справки, это было что-то устаревшее в 2017 году (https://github.com/pandas-dev/pandas/issues/18366)

Существует несколько подходов (из этого SO Ответ )

Вы можете изменить свой код

agg = long_df.reset_index().groupby(['RegionVariable', 'EXP'])[features].agg(['count','mean'])

или использовать что-то вроде пользовательской pd.Series.apply функции.

...