全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析与数据挖掘
415 0
2022-11-10

与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)返回属性错误。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群