[英]Python grouping and getting the Average, Minimum and Maximum values
我有一個 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
我有以下代碼:
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
我似乎無法攜帶標題,但這沒什么大不了的,我只是將標題放在另一個步驟中。 我試圖解決的問題是添加將提供最低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()
,然后第四次運行將它們組合起來。 由於我是菜鳥,我什至不知道如何在不設置 4 組代碼和單獨運行文件 4 次的情況下執行此操作。
通過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'],
values='NumberOfDays',
aggfunc=('min','mean','max'))
.rename(columns=d)
.reset_index()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.