Агрегация панд со словарем `count_if = 1` игнорируется. - PullRequest
0 голосов
/ 15 октября 2018

Я бы хотел объединить Pandas DataFrame, используя sum и получить NaN, если все значения группы NaN.Это работает в случае .agg('sum', min_count=1), но min_count игнорируется при использовании словаря агрегации.

Что мне здесь не хватает и как я могу это исправить?

Пример:

import pandas as pd
import numpy as np
d = {'l':  ['a', 'b', 'a', 'b', 'c', 'c'],
     'v': [-1, 1, np.nan, 1, np.nan, np.nan],
     'w': [-1, 1, np.nan, 1, np.nan, np.nan]}
df = pd.DataFrame(d)

sum вернул бы 0.0 для групп, которые все NaN, но мы можем это исправить, используя аргументы min_count=1:

print(df.groupby('l')['v'].agg('sum'))
> l
> a   -1.0
> b    2.0
> c    0.0
> Name: v, dtype: float64

print(df.groupby('l')['v'].agg('sum', min_count=1))
> l
> a   -1.0
> b    2.0
> c    NaN
> Name: v, dtype: float64

Но при использовании словаря, похоже, игнорирует ключевое слово аргумент.

df.groupby('l').agg({'v':'sum', 'w':'mean'}, min_count=1)
> Name: v, dtype: float64
>      v    w
> l          
> a -1.0 -1.0
> b  2.0  1.0
> c  0.0  NaN

Спасибо за помощь!

1 Ответ

0 голосов
/ 15 октября 2018

Вы можете использовать лямбда-функцию:

df1 = df.groupby('l').agg({'v': lambda x: x.sum(min_count=1), 'w': 'mean'})
print (df1)
     v    w
l          
a -1.0 -1.0
b  2.0  1.0
c  NaN  NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...