pandas groupby agg - разница между именем функции и именем функции в строке - PullRequest
0 голосов
/ 09 июля 2019

некоторые функции - это трюки для ввода agg() (см. Также в этом посте ):

import numpy as np
import pandas as pd

df = pd.DataFrame({'g': list('aabbccc'), 
                   'value': list(range(6)) + [np.nan]
                   })
#   g  value
#0  a    0.0
#1  a    1.0
#2  b    2.0
#3  b    3.0
#4  c    4.0
#5  c    5.0
#6  c    NaN

df.groupby('g')['value'].count() # works
#Out[495]: 
#g
#a    2
#b    2
#c    2
#Name: value, dtype: int64


df.groupby('g')['value'].agg('count') # works
#Out[496]: 
#g
#a    2
#b    2
#c    2
#Name: value, dtype: int64

df.groupby('g')['value'].agg(count) # np.count, pd.count don't work either
# err: 'count' not defined

Есть ли какая-либо другая разница между agg('count') и agg(count)?Всегда ли безопасно использовать строку?

Я хочу использовать функцию не в строке, чтобы я мог написать lambda выражения, такие как

df.groupby('g')['value'].agg(lambda x: (size(x) - count(x)) / size(x))

update: thank u@ WeNYoBen

Теперь я могу сделать:

# want to see percentage of NA
# (size - count) gives how many NA, and divided by size to get percentage 
df.groupby('g')['value'].agg(lambda x: (np.size(x) - pd.Series.count(x)) / np.size(x))
#Out[530]: 
#g
#a    0.000000
#b    0.000000
#c    0.333333
#Name: value, dtype: float64

# equivalently
df.groupby('g')['value'].agg(lambda x: sum(x.isna()) / np.size(x))
#Out[531]: 
#g
#a    0.000000
#b    0.000000
#c    0.333333
#Name: value, dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...