我有一个类似这样的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
起始数据文件的大小超过3GB,包含超过3000万条记录。经过转换后,文件大小变得更小。由于起始文件大小较大,我正在尝试找到一种方法,可以避免分四个不同步骤进行操作。我需要进行三个独立的步骤/运行来获取
mean()
、max()
和min()
,然后再进行第四次运行来将它们组合在一起。由于我是一个新手,甚至不知道如何在不设置4组代码并单独运行文件4次的情况下完成此操作。
df.groupby(['Class','Code','Vendor','State'], as_index=False)
,因为它看起来更好 :) - zipadf.pivot_table(index=['Class','Code','Vendor','State'],values='NumberOfDays',aggfunc=('min','mean','max')).rename(columns=d).reset_index()
。 - Bharath M Shetty