一些函数是放入agg()
的技巧(另请参阅this post):
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))
更新:谢谢你@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