Dev*_*vPy 4 python group-by aggregate pandas pandas-groupby
我正在使用这个数据集census.csv
代码:
df = pd.read_csv('Data/census.csv')
df = df[df['SUMLEV']==50]
print(df.head())
Run Code Online (Sandbox Code Playgroud)
这是我的数据的样子:
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
Run Code Online (Sandbox Code Playgroud)
我想在按“STNAME”分组后对两列进行汇总:
(df.set_index('STNAME').groupby(level=0)['POPESTIMATE2010','POPESTIMATE2011'].agg(Avg= np.average, Sum = np.sum))
Run Code Online (Sandbox Code Playgroud)
错误:
----> 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).
Run Code Online (Sandbox Code Playgroud)
虽然其他人很快给出了单行代码片段,但我尝试更多地解释您拥有的选项类型,以及 pandasagg()函数理解的语法是什么。
您正在处理的对象的类型是
type(df.set_index('STNAME').groupby(level=0)[['POPESTIMATE2010','POPESTIMATE2011']])
# pandas.core.groupby.generic.DataFrameGroupBy
Run Code Online (Sandbox Code Playgroud)
因此,查看pandas.DataFrameGroupby.agg的文档可能是一个好的开始
给出的参数agg可以是
(1) string (function name)
(2) function
(3) list of functions
(4) dict of column names -> functions (or list of functions).
Run Code Online (Sandbox Code Playgroud)
如果你给函数名字符串作为参数,它必须是一个“pandas 理解的函数名”。理解的函数名称至少是:'sum','mean','std'. 例子:
type(df.set_index('STNAME').groupby(level=0)[['POPESTIMATE2010','POPESTIMATE2011']])
# pandas.core.groupby.generic.DataFrameGroupBy
Run Code Online (Sandbox Code Playgroud)
由于您想要计算两件事:mean 和 sum,您需要两个函数调用。一种带有“均值”,一种带有“总和”。
您还可以将任何函数作为参数。该函数应该将类似数组的数据 (pd.Series) 作为输入,并从中产生标量值。例子:
(1) string (function name)
(2) function
(3) list of functions
(4) dict of column names -> functions (or list of functions).
Run Code Online (Sandbox Code Playgroud)
由于您想要计算两件事:mean 和 sum,您需要两个函数调用。一个是 np.mean,一个是 np.sum。
您还可以给出 的参数的函数列表agg()。例子:
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
...
Run Code Online (Sandbox Code Playgroud)
这样做的好处是您只需要一个函数调用。如果您希望使用多列计算相同的操作,请使用此选项
如果将字典作为参数提供给agg(),则键必须表示数据框中的列名称,并且值应该是函数或函数列表。例子:
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
...
Run Code Online (Sandbox Code Playgroud)
这样做的好处是您只需要一个函数调用。如果您希望使用不同的列计算不同的操作,请使用此选项
| 归档时间: |
|
| 查看次数: |
1379 次 |
| 最近记录: |