Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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 有没有办法在聚合函数中创建自定义函数?_Python_Python 3.x_Pandas_Aggregate_Pandas Groupby - Fatal编程技术网

Python 有没有办法在聚合函数中创建自定义函数?

Python 有没有办法在聚合函数中创建自定义函数?,python,python-3.x,pandas,aggregate,pandas-groupby,Python,Python 3.x,Pandas,Aggregate,Pandas Groupby,要在数据帧中应用自定义函数吗 例如,数据帧 index City Age 0 1 A 50 1 2 A 24 2 3 B 65 3 4 A 40 4 5 B 68 5 6 B 48 要应用的函数 def count_people_above_60(age): ** *** #i

要在数据帧中应用自定义函数吗 例如,数据帧

    index City  Age 
0   1    A    50    
1   2    A    24    
2   3    B    65    
3   4    A    40     
4   5    B    68    
5   6    B    48    
要应用的函数

def count_people_above_60(age):
     **    ***                       #i dont know if the age can or can't be passed as series or list to perform any operation later
     return count_people_above_60 
期待做类似的事情

df.groupby(['City']).agg{"AGE" : ["mean",""count_people_above_60"]}
预期产量

City  Mean People_Above_60
 A    38    0
 B    60.33    2


如果性能很重要,则创建一个新列,该列由转换为
整数的比较值填充,因此使用for count进行聚合
求和

df = (df.assign(new = df['Age'].gt(60).astype(int))
        .groupby(['City'])
        .agg(Mean= ("Age" , "mean"), People_Above_60= ('new',"sum")))
print (df)
           Mean  People_Above_60
City                            
A     38.000000                0
B     60.333333                2
您的解决方案应该使用比较值和
sum
进行更改,但如果有多个组或较大的
DataFrame

def count_people_above_60(age):
    return (age > 60).sum()

df = (df.groupby(['City']).agg(Mean=("Age" , "mean"), 
                               People_Above_60=('Age',count_people_above_60)))
print (df)
           Mean  People_Above_60
City                            
A     38.000000                0
B     60.333333                2