2017-10-17 558 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

相關問題