今天学习pandas的时候,碰到了agg和apply聚合后调用自定义函数的例子,如下所示:
df_ = pd.DataFrame(np.random.randint(5,20,(5,4)), columns=list('abcd'))
df_['e'] = list('AABBC')
# a b c d e
# 0 18 15 7 18 A
# 1 19 11 15 7 A
# 2 12 19 13 19 B
# 3 7 19 6 13 B
# 4 9 18 9 13 C
def get_stats(group_):
return {'min': group_.min(), 'max': group_.max(),
'count': group_.count(), 'mean': group_.mean()}
df_[['a', 'e']].groupby('e').apply(get_stats)
# e
# A {'min': [18, 'A'], 'max': [19, 'A'], 'count': ...
# B {'min': [7, 'B'], 'max': [12, 'B'], 'count': [...
# C {'min': [9, 'C'], 'max': [9, 'C'], 'count': [1...
# dtype: object
df_['a'].groupby(list('AABBC')).apply(get_stats)
# A min 18.0
# max 19.0
# count 2.0
# mean 18.5
# B min 7.0
# max 12.0
# count 2.0
# mean 9.5
# C min 9.0
# max 9.0
# count 1.0
# mean 9.0
# Name: a, dtype: float64
请教一下,apply的时候groupby是同一个内容,出来的结果为什么一个是索引+字典的形式,另一个是复合索引+值的Series,是因为前者groupby的是一个Dataframe,后者groupby的是一个Series吗?这两个方法传入自定义函数get_stats的时候是怎么一个执行过程呢?感激不尽