热线电话:13121318867

登录
2019-02-27 阅读量: 713
Pandas - DataFrame聚合表现奇怪 问问题

与Dataframe聚合方法相关的传递列表问题和Pandas无法与聚合函数列表聚合

考虑这个数据帧

import pandas as pd

import numpy as np

df = pd.DataFrame(index=range(10))

df['a'] = [ 3 * x for x in range(10) ]

df['b'] = [ 1 -2 * x for x in range(10) ]

根据您的文档,aggregate您应该能够使用以下方式指定要聚合的列dict:

df.agg({'a' : 'mean'})

哪个回报

a 13.5

但是如果你尝试aggregate使用像这样的用户定义的函数

def nok_mean(x):

return np.mean(x)

df.agg({'a' : nok_mean})

它返回每行而不是列的平均值

a

0 0.0

1 3.0

2 6.0

3 9.0

4 12.0

5 15.0

6 18.0

7 21.0

8 24.0

9 27.0

为什么用户定义的函数不会与聚合np.mean或返回相同'mean'?

这是使用pandas版本0.23.4,numpy版本1.15.4,python版本3.7.1

解决办法:这个问题与申请np.mean系列有关。我们来看几个例子:

def nok_mean(x):

return x.mean()

df.agg({'a': nok_mean})

a 13.5

dtype: float64

这可以正常工作,因为您使用的是pandas版本的均值,可以应用于系列或数据框:

df['a'].agg(nok_mean)

df.apply(nok_mean)

让我们看看当np.mean应用于系列时会发生什么:

def nok_mean1(x):

return np.mean(x)

df['a'].agg(nok_mean1)

df.agg({'a':nok_mean1})

df['a'].apply(nok_mean1)

df['a'].apply(np.mean)

一切都归来

0 0.0

1 3.0

2 6.0

3 9.0

4 12.0

5 15.0

6 18.0

7 21.0

8 24.0

9 27.0

Name: a, dtype: float64

当您应用于np.mean数据帧时,它按预期工作:

df.agg(nok_mean1)

df.apply(nok_mean1)

a 13.5

b -8.0

dtype: float64

为了np.mean按照预期的方式使用函数传递一个ndarray for x:

def nok_mean2(x):

return np.mean(x.values)

df.agg({'a':nok_mean2})

a 13.5

dtype: float64

我猜所有这都与此有关apply,这就是为什么df['a'].apply(nok_mean2)返回属性错误。

11.0007
3
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子