Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-Groupby-何时使用apply()/agg()_Python_Pandas_Apply_Aggregate Functions_User Defined Functions - Fatal编程技术网

Python-Groupby-何时使用apply()/agg()

Python-Groupby-何时使用apply()/agg(),python,pandas,apply,aggregate-functions,user-defined-functions,Python,Pandas,Apply,Aggregate Functions,User Defined Functions,我最近遇到了一个有趣的问题,关于Pandas Groupby()中.agg()和.apply()之间的区别 它澄清了很多,但我仍然对何时使用.agg()和何时使用.apply()有点困惑 演示数据集: import pandas as pd import numpy as np df_min = pd.DataFrame({"A":[0.0,0.0,np.nan,0.0,0.42832,np.nan,0.62747,0.69856],

我最近遇到了一个有趣的问题,关于Pandas Groupby()中.agg()和.apply()之间的区别

它澄清了很多,但我仍然对何时使用.agg()和何时使用.apply()有点困惑

演示数据集:

import pandas as pd
import numpy as np

df_min = pd.DataFrame({"A":[0.0,0.0,np.nan,0.0,0.42832,np.nan,0.62747,0.69856],
                   "B":[0.42832,0.69856,0.75865,0.42832,0.62747,0.27024,0.42832,np.nan], 
                   "C":[0,0,1,0,0,0,0,0]})

目标:通过groupby语句填写np.nan

我的代码如下:

fill_na = lambda x: x.fillna(x.mean())
df_min.groupby('transportation_issues').apply(fill_na) 
df_min.groupby('transportation_issues').agg(fill_na) 
现在,当我应用.apply()时,代码完成了它的工作并得到了结果。但是当我使用.agg()时,ValueError发生如下情况:

ValueError:传递值的形状是(3,2),索引暗示(2,2)

所以,我的问题是:

1:为什么.agg()不起作用

2:通过应用.agg(),我应该如何使用户定义的函数工作

3:在groupby()上应用用户定义的函数时,我应该分别使用.apply()和.agg()的时间

4:在groupby()中,是否对整个数据集使用.apply()函数,对列使用agg()函数

5:在引擎盖下,.apply()和.agg()如何区分


非常感谢您回答我的问题,非常感谢您的帮助

在您的df中,哪一列是运输问题?请发布一个接近代码实际使用的数据样本。请参阅。
transform()
是否在“帮助”中构造?@nycorder嘿,传输问题代表演示数据集上的二进制列。@Parfait嘿,谢谢你的建议!在以后的问题中,我将遵循你帖子上的建议。
fill_na = lambda x: x.fillna(x.mean())
df_min.groupby('transportation_issues').apply(fill_na) 
df_min.groupby('transportation_issues').agg(fill_na)