python groupby聚合函数错误

时间:2018-07-22 14:20:40

标签: python pandas

我尝试了以下代码

x=dd.groupby(['name','sal'])['sal'].agg({'Frequency':'count'})
nombre=x.columns.tolist()[0]
x.rename(columns={nombre:'Freq'},inplace=True)
x['Pct']=round((x['Freq']/x.Freq.sum())*100,2)
x['Freq Acum'],x['Cumm Percent']=x.Freq.cumsum(),x.Pct.cumsum()
x.sort_values(['Freq'],ascending=[0],inplace=True)
pd.set_option('display.max_columns',500)
print('           Frequency on : '+nombre)
print('\n')
print(x)
print('\n')

我可以得到我期望的以下结果:

    Frequency on : Frequency


               Freq   Pct  Freq Acum  Cumm Percent
    name  sal                                     
    Amit  100     2  50.0          2          50.0

    gupta 200     1  25.0          3          75.0

    hello 300     1  25.0          4         100.0

但是当我尝试将以下代码放入功能中时:

def cross_freq_2way(dataset,arg1,arg2):
        x= dataset.groupby([arg1,arg2],axis=1).agg(({'Frequency':'count'}),axis=1)
        nombre=x.columns.tolist()[0]
        x.rename(columns={nombre:'Freq'},inplace=True)
        x['Pct']=round((x['Freq']/x.Freq.sum())*100,2)
        x['Freq Acum'],x['Cumm Percent']=x.Freq.cumsum(),x.Pct.cumsum()
        x.sort_values(['Freq'],ascending=[0],inplace=True)
        pd.set_option('display.max_columns',500)
        print('           Frequency on : '+nombre)
        print('\n')
        print(x)
        print('\n') 

print(cross_freq_2way(dd,['name'],['sal']))

我收到ValueError:石斑鱼和轴的长度必须相同。请帮忙。

1 个答案:

答案 0 :(得分:0)

尝试一下:

def cross_freq_2way(dataset,arg1,arg2):
    x= dataset.groupby(arg1 + arg2)[arg2[0]].agg(({'Frequency':'count'}))
    …

您使用列表参数调用cross_freq_2way,因此您不应创建另一个列表来包装它们。