我在pandas中使用cumsum来创建一个运行计数,它占用的内存比数据帧本身占用的内存多。我正在运行的功能如下:
def gen_obs_num(df):
df.sort(columns=['Index', 'Date'], inplace=True)
df['obs_num'] = 1
df['obs_num'] = df.groupby(['Index', 'Date'])['obs_num'].cumsum()
return df
有关如何以更节省内存的方式执行相同操作的任何想法吗?
基本上我想在以下格式的数据框中添加一列:
Index Date
A 1/1/2000
A 1/2/2000
A 1/2/2000
B 1/1/2000
B 1/1/2000
B 1/10/2000
这样就变成了:
Index Date obs_num
A 1/1/2000 1
A 1/2/2000 1
A 1/2/2000 2
B 1/1/2000 1
B 1/1/2000 2
B 1/10/2000 1
答案 0 :(得分:1)
帝斯曼的回答大大减少了内存使用量。重申一下,最好的方法是使用cumcount()代替:
df['obs_num'] = df.groupby(["Index", "Date"]).cumcount() + 1