我在玩弄我无法解释的对象apply和agg方法时进行了观察DataFrameGroupBy。
介绍
我理解以下代码,但它作为问题的介绍可能很有用。
我正在分组 DataFrame my_df
key col0 col1
0 1 A B
1 1 C D
2 2 E F
3 2 G H
按'key'列然后apply按函数
def func(df):
return ''.join(df['col0'] + df['col1'])
产生
>>> my_df.groupby('key').apply(func)
key
1 ABCD
2 EFGH
dtype: object
这按预期工作。我可以访问列'col0','col1'因为func使用时传递给的“分组块”apply是数据帧。
题
我不明白为什么KeyError在使用agg而不是apply使用相同的功能时会引发no 。
>>> my_df.groupby('key').agg(func)
col0 col1
key
1 ABCD ABCD
2 EFGH EFGH
据我了解,当使用aggthen 时,func会Series 为 的每一列的每个组传递一个my_df,因此df参数应该是类型Series,并且尝试执行df['col0']并且df['col1']应该生成一个KeyError.
为什么会agg产生结果?我的在哪里KeyError?
研究
我确认,df是Series不能被索引与df['col0']和df['col1']与调试。
然而my_df.groupby('key').agg(func)神奇的作品。
设置:
from IPython.core.debugger import Pdb
import sys
def set_trace():
Pdb().set_trace(sys._getframe().f_back)
def func(df):
set_trace()
return ''.join(df['col0'] + df['col1'])
用法:
>>> my_df.groupby('key').agg(func)
> <ipython-input-258-9f34bde72bce>(9)func()
6
7 def func(df):
8 set_trace()
----> 9 return ''.join(df['col0'] + df['col1'])
10
ipdb> type(df)
<class 'pandas.core.series.Series'>
ipdb> df
0 A
1 C
Name: col0, dtype: object
ipdb> df['col0']
*** KeyError: 'col0'
ipdb> df['col1']
*** KeyError: 'col1'
守候你守候我
猛跑小猪
相关分类