我有csv数据:
Class, Code, Vendor, State, NumberOfDays
3, 123, Name1, NE, 12.58402778
1, 876, Name2, TX, 12.51041667
3, 123, Name1, NE, 2.354166667
1, 876, Name2, TX, 12.21111111
3, 456, Name2, NY, 6.346527778
2, 876, Name1, NY, 5.513194444
3, 123, Name1, NE, 5.38125
1, 876, Name2, TX, 5.409722222
我有以下代码,它根据其他字段的分组为我提供了该字段的mean
, min
,max
和median
NumberOfDays
df = pd.read_csv(r'C:...input.csv')
d = {'mean':'AverageDays','min':'LowestNumberOfDays','max':'HighestNumberOfDays','median':'MedianDays'}
df = (df.groupby(['Class','Code','Vendor','State'])['NumberOfDays']
.agg(['mean','min','max','median'])
.rename(columns=d)
.reset_index())
df.to_csv(r'C:...output.csv', index=False)
它完美地满足了我的需求:
Class,Code,Vendor,State,AverageDays,LowestNumberOfDays,HighestNumberOfDays,MedianDays
1,876,Name2,TX,10.043750000666666,5.409722222,12.51041667,12.21111111
2,876,Name1,NY,5.513194444,5.513194444,5.513194444,5.513194444
3,123,Name1,NE,6.773148149,2.354166667,12.58402778,5.38125
3,456,Name2,NY,6.346527778,6.346527778,6.346527778,6.346527778
当我添加mode
到代码时:
d = {'mean':'AverageDays','min':'LowestNumberOfDays','max':'HighestNumberOfDays','median':'MedianDays','mode':'ModeDays'}
df = (df.groupby(['Class','Code','Vendor','State'])['NumberOfDays']
.agg(['mean','min','max','median','mode'])
我收到此错误:
AttributeError:无法访问“SeriesGroupBy”对象的可调用属性“mode”,请尝试使用“apply”方法
当我研究这个时,我发现模式不是 Pandas 中的自然函数,但我的问题是我无法弄清楚如何利用其他方法来计算模式,并将其合并到代码的同一步骤中,因为这一步减少了我的数据集成凝聚的群体。所以我不能在之后运行它,如果我在之前运行它,我将需要在每个组的所有数据行中重复应用模式值。我的数据已经超过 4 演出和 3000 万条记录,所以我想避免让它变得更大。
您可以使用 value_counts 作为模式
d = {'mean':'AverageDays','min':'LowestNumberOfDays','max':'HighestNumberOfDays','median':'MedianDays', '<lambda>': 'ModeDays'}
df.groupby(['Class','Code','Vendor','State'])['NumberOfDays']\
.agg(['mean','min','max','median', lambda x: x.value_counts().index[0]])\
.rename(columns=d)\
.reset_index()
Class Code Vendor State AverageDays LowestNumberOfDays HighestNumberOfDays MedianDays ModeDays
0 1 876 Name2 TX 10.043750 5.409722 12.510417 12.211111 12.510417
1 2 876 Name1 NY 5.513194 5.513194 5.513194 5.513194 5.513194
2 3 123 Name1 NE 6.773148 2.354167 12.584028 5.381250 2.354167
3 3 456 Name2 NY 6.346528 6.346528 6.346528 6.346528 6.346528
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句