pandas groupby agg-函数名称与字符串中的函数名称之间的区别

时间:2019-07-08 21:06:58

标签: python pandas group-by pandas-groupby

一些函数是放入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

0 个答案:

没有答案