gpt4 book ai didi

python - Pandas:DataFrameGroupby 的聚合

转载 作者:行者123 更新时间:2023-12-03 20:05:08 25 4
gpt4 key购买 nike

我正在处理这个数据集 census.csv
代码:

df = pd.read_csv('Data/census.csv')
df = df[df['SUMLEV']==50]

print(df.head())
这是我的数据的样子:
   SUMLEV  REGION  DIVISION  ...  RNETMIG2013  RNETMIG2014 RNETMIG2015
1 50 3 6 ... -2.722002 2.592270 -2.187333
2 50 3 6 ... 22.727626 20.317142 18.293499
3 50 3 6 ... -7.167664 -3.978583 -10.543299
4 50 3 6 ... -5.403729 0.754533 1.107861
5 50 3 6 ... -1.402476 -1.577232 -0.884411
我想在按“STNAME”分组后对两列进行汇总:
(df.set_index('STNAME').groupby(level=0)['POPESTIMATE2010','POPESTIMATE2011'].agg(Avg= np.average, Sum = np.sum))
错误:
----> 3 (df.set_index('STNAME').groupby(level=0)['POPESTIMATE2010','POPESTIMATE2011'].agg(Avg= np.average, Sum = np.sum))

f:\software_installations\anaconda3\lib\site-packages\pandas\core\groupby\generic.py in aggregate(self, func, *args, **kwargs)
922 elif func is None:
923 # nicer error message
--> 924 raise TypeError("Must provide 'func' or tuples of '(column, aggfunc).")
925
926 func = _maybe_mangle_lambdas(func)

TypeError: Must provide 'func' or tuples of '(column, aggfunc).

最佳答案

虽然其他人很快给出了单行代码片段,但我尝试更多地解释您拥有的选项类型,以及 Pandas 理解的语法是什么 agg()功能。
我们在处理什么?
您正在处理的对象的类型是

type(df.set_index('STNAME').groupby(level=0)[['POPESTIMATE2010','POPESTIMATE2011']])
# pandas.core.groupby.generic.DataFrameGroupBy
因此,查看 pandas.DataFrameGroupby.agg 的文档可能是一个好的开始。
文档怎么说?
agg 的参数可
(1) string (function name)
(2) function
(3) list of functions
(4) dict of column names -> functions (or list of functions).
(1) 字符串(函数名)
如果你给函数名字符串作为参数,它必须是一个“pandas 理解的函数名”。理解的函数名至少是: 'sum','mean','std' .例子:
In [24]: df.set_index('STNAME').groupby(level=0)[['POPESTIMATE2010','POPESTIMATE2011']].agg('mean')
Out[24]:
POPESTIMATE2010 POPESTIMATE2011
STNAME
Alabama 71420.313433 71658.328358
Alaska 24621.413793 24921.379310
Arizona 427213.866667 431248.800000
...
由于您想要计算两件事:mean 和 sum,您需要两个函数调用。一种带有“均值”,一种带有“总和”。
(2) 功能
您还可以将任何函数作为参数。该函数应该将类似数组的数据 (pd.Series) 作为输入,并从中产生标量值。例子:
In [25]: df.set_index('STNAME').groupby(level=0)[['POPESTIMATE2010','POPESTIMATE2011']].agg(np.mean)
Out[25]:
POPESTIMATE2010 POPESTIMATE2011
STNAME
Alabama 71420.313433 71658.328358
Alaska 24621.413793 24921.379310
...
由于您想要计算两件事:mean 和 sum,您需要两个函数调用。一个是 np.mean,一个是 np.sum。
(3) 功能列表
你也可以给出 agg() 的参数的函数列表。 .例子:
In [27]: df.set_index('STNAME').groupby(level=0)[['POPESTIMATE2010','POPESTIMATE2011']].agg([np.mean, np.sum])
Out[27]:
POPESTIMATE2010 POPESTIMATE2011
mean sum mean sum
STNAME
Alabama 71420.313433 4785161 71658.328358 4801108
Alaska 24621.413793 714021 24921.379310 722720
Arizona 427213.866667 6408208 431248.800000 6468732
...
这样做的好处是您只需要一个函数调用。 如果您希望使用多列计算相同的操作,请使用此选项
(4) dict到列名->函数
如果您将字典作为 agg() 的参数,然后是 key 必须代表 列名在数据框中,值应该是函数或 函数列表 .例子:
In [30]: In [27]: df.set_index('STNAME').groupby(level=0)[['POPESTIMATE2010','POPESTIMATE2011']].agg({"POPESTIMATE2010": [np.mean, np.sum], "POPESTIMATE2011": [np.mean, np.sum]})
Out[30]:
POPESTIMATE2010 POPESTIMATE2011
average sum mean sum
STNAME
Alabama 71420.313433 4785161 71658.328358 4801108
Alaska 24621.413793 714021 24921.379310 722720
Arizona 427213.866667 6408208 431248.800000 6468732
...
这样做的好处是您只需要一个函数调用。 如果您希望使用不同的列计算不同的操作,请使用此选项

关于python - Pandas:DataFrameGroupby 的聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62980092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com