我编写了一个函数来对多列进行滚动求和,然后将新的滚动求和序列作为列添加到原始数据帧上。很简单。
def rolling_sum(df, columns, w=3):
'''insert rolling sum for each column in list of columns for window (w) in months. '''
for column in columns:
print column + 'sum'+ str(3)
df.index = df.date
series = df.groupby(['pixel']).rolling(w)[column].sum() # no year. so rolls over dec-jan
series = series.reset_index(level=[0,1])
series.rename(index=str, columns={column: column + 'sum' + str(w)}, inplace=True)
#df = df.merge(series, on=['pixel','date']) # unnecessary
df = df.merge(series)
print 'successful merge'
return df
'lo'n看到它可以用于一个数据帧(1 GB),并且可以在另一个数据帧上工作(它们合并在完全相同的列上-对象'date'[2012-06]和float64'像素” [1000.1])。
半失败的情况似乎在第二列或第三列之后大量消耗了RAM。好像它以某种方式存储了一堆不必要的内存。此df仅为100 MB,我尝试将其缩减为10 MB,但它仍然执行相同的操作,但使其达到第四列左右。
关于如何解决此问题的任何想法?