【问题标题】:Is Pandas 0.16.1 groupby().apply() method applying function more than once to the same group? [duplicate]Pandas 0.16.1 groupby().apply() 方法是否多次将函数应用于同一组? [复制]
【发布时间】:2015-08-18 04:34:26
【问题描述】:

我注意到,在使用 pandas 0.16.1 的某些情况下,groupby() 上的 apply() 函数不止一次应用于一个或多个输出组。这是复制品:

In [1]: 
df2 = DataFrame ({"a" : ["alpha", "alpha", "alpha", "beta","beta","beta","beta","gamma"]})
df2 ["b"] = Series ([i for i in range(0,len(df2))])
df2

Out [1]:
    a   b
0   alpha   0
1   alpha   1
2   alpha   2
3   beta    3
4   beta    4
5   beta    5
6   beta    6
7   gamma   7

In [2]: 
def my_func (df):
    print(df.index)

In [3]: 
df2.groupby("a").apply(my_func)

Out [3]:
Int64Index([0, 1, 2], dtype='int64')
Int64Index([0, 1, 2], dtype='int64')
Int64Index([3, 4, 5, 6], dtype='int64')
Int64Index([7], dtype='int64')

注意[0,1,2] 索引在输出中出现了两次。这似乎表明该函数已两次应用于alpha 组。

这不是一个大问题,因为这些函数首先是幂等的。但是,如果函数在运行时方面成本很高(想想大回归运行等),它可能会成为一个更大的问题。

我是在错误地使用 API 和/或误解了此输出,还是这里可能存在问题?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    documented行为:

    在当前的实现中,apply 对第一组调用 func 两次,以决定它是否可以采用快速或慢速代码路径。如果 func 有副作用,这可能会导致意外行为,因为它们会对第一组生效两次。

    【讨论】:

      【解决方案2】:

      根据文档 (http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.apply.html)

      在当前实现中,apply 在第一列/行上调用 func 两次,以决定它是否可以采用快速或慢速代码路径。

      【讨论】:

        猜你喜欢
        • 2019-09-30
        • 2023-01-19
        • 2020-05-10
        • 2018-06-19
        • 1970-01-01
        • 2020-01-04
        • 1970-01-01
        • 1970-01-01
        • 2015-08-20
        相关资源
        最近更新 更多