некоторые функции - это трюки для ввода 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