Pandas groupby() 不接受带选项的 apply() 方法
使用以下示例:
arrays = [['one','one','one','two','two','two'],[1,2,3,1,2,3]]
df = pd.DataFrame(np.random.randn(6,2),index=pd.MultiIndex.from_tuples(zip(*arrays)),columns=['A','B'])
正如预期的那样,这个 apply 方法可以在 groupby 对象上使用:
df.groupby(level=0).apply(lambda x: pd.rolling_mean(x, window=3, center=True))
但是,当我为 apply 指定选项时,它却报错了:
df.groupby(level=0).apply(lambda x: pd.rolling_mean(x, window=3, center=True), raw=True)
TypeError: <lambda>() got an unexpected keyword argument 'raw'
我搞不清楚哪里出错了。
注意:对于非 MultiIndex 对象,这个方法似乎工作得很好。
1 个回答
4
对于DataFrame
和GroupBy
对象,有不同的apply
方法。只有DataFrame.apply
方法有一个raw
参数:
help(df.apply)
# Output:
Help on method apply in module pandas.core.frame:
apply(self, func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds) method of pandas.core.frame.DataFrame instance
Applies function along input axis of DataFrame.
...
而对于分组操作(groupby)来说:
grouped = df.groupby(level=0)
help(grouped.apply)
# Output:
Help on method apply in module pandas.core.groupby:
apply(self, func, *args, **kwargs) method of pandas.core.groupby.DataFrameGroupBy instance