我在熊猫中使用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

最佳答案

DSM的答案大大减少了内存使用量。重申一下,最好的方法是改用cumcount():

df['obs_num'] = df.groupby(["Index", "Date"]).cumcount() + 1

10-05 22:58
查看更多