我试图通过复制最后一行然后修改某些值来为数据框中的每个组创建一个新行。我的方法如下,concat步骤似乎是瓶颈(我也尝试追加)。有什么建议吗?
def genNewObs(df):
lastRowIndex = df.obsNumber.idxmax()
row = pd.DataFrame(df.ix[lastRowIndex].copy())
# changes some other values in row here
df = pd.concat([df,row], ignore_index=True)
return df
df = df.groupby(GROUP).apply(genNewObs)
编辑1:基本上我有一堆数据,其中包含不同日期的最后一次观察。我想在当前日期为所有组创建最终观察结果。
Group Date Days Since last Observation
A 1/1/2014 0
A 1/10/2014 9
B 1/5/2014 0
B 1/25/2014 20
B 1/27/2014 2
如果我们假装当前日期是2014年1月31日,则变为:
Group Date Days Since last Observation
A 1/1/2014 0
A 1/10/2014 9
A 1/31/2014 21
B 1/5/2014 0
B 1/25/2014 20
B 1/27/2014 2
B 1/31/2014 4
我尝试过放大设置,这是所有技巧中最慢的。有什么想法吗?
答案 0 :(得分:0)
感谢用户1827356,我通过取消应用操作将其加速了100倍。出于某种原因,首先是按组列删除,所以我使用了idxmax。
def genNewObs(df):
lastRowIndex = df.groupby(Group).Date.idxmax()
rows = df.ix[lastRowIndex]
df = pd.concat([df,rows], ignore_index=True)
df = df.sort([Group, Date], ascending=True)
return df