2017-10-17 67 views
2

我有一个CSV数据集,看起来像这样:Python的分组并得到平均值,最小值和最大值

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 

我有以下代码代码:

df = pd.read_csv(r'C:\Python36\Data\testing\LowHighMean.csv') 
df2 = df.groupby(['Class','Code','Vendor','State'])['NumberOfDays'].mean().apply(lambda x: '{:.2f}'.format(x)) 
df2.to_csv(r'C:\Python36\Data\testing\output.csv') 

其中在伟大工程通过对其他字段进行分组,让我获得普通的“NumberOfDays”:

1,876,Name2,TX,10.04 
2,876,Name1,NY,5.51 
3,123,Name1,NE,6.77 
3,456,Name2,NY,6.35 

我似乎无法继承hea但是这并不是什么大问题,我只是把头文件放在另一个步骤上。我试图解决的问题是添加将提供最低min()和最高max()值的列。我期待这样创建:

Class, Code, Vendor, State, AverageDays, LowestNumberOfDays, HighestNumberOfDays 
1,  876, Name2, TX,  10.04,  5.41     12.51    
2,  876, Name1, NY,  5.51,  5.51     5.51 
3,  123, Name1, NE,  6.77,  2.35     12.58 
3,  456, Name2, NY,  6.35,  6.35     6.35 

启动数据文件的大小超过3 gig和超过3000万条记录。转换后文件大小变得更小。由于开始的文件大小,我试图找出一种方法,我可以避免在四个不同的步骤中执行此操作。 3个独立的步骤/运行得到mean(),max()min(),然后第四轮将它们组合。由于我是一个noob,我甚至不知道如何设置4组代码并单独运行文件4次。

回答

2

使用由agg聚集,则需要重命名列:

d = {'mean':'AverageDays','min':'LowestNumberOfDays','max':'HighestNumberOfDays'} 
df = (df.groupby(['Class','Code','Vendor','State'])['NumberOfDays'] 
     .agg(['mean','min','max']) 
     .rename(columns=d) 
     .reset_index()) 
print (df) 
    Class Code Vendor State AverageDays LowestNumberOfDays \ 
0  1 876 Name2 TX 10.043750   5.409722 
1  2 876 Name1 NY  5.513194   5.513194 
2  3 123 Name1 NE  6.773148   2.354167 
3  3 456 Name2 NY  6.346528   6.346528 

    HighestNumberOfDays 
0   12.510417 
1    5.513194 
2   12.584028 
3    6.346528 

感谢替代解决方案,Bharath shetty

df = df.pivot_table(index=['Class','Code','Vendor','State'], 
        value‌​s='NumberOfDays', 
        agg‌​func=('min','mean','‌​max')) 
     .rename(column‌​s=d) 
     .reset_index() 
+0

那这么快,一个 – Dark

+0

我建议'df.groupby([”因为它看起来更好:) – zipa

+0

@zipa - 我试试看,不工作:( – jezrael

相关问题