在pandas中向groupby添加额外行的最快方法
我想为数据表中的每个组创建一行新数据,方法是复制最后一行,然后修改一些值。我的做法是这样的,但在合并的步骤上似乎速度很慢(我也试过用追加的方法)。有没有什么建议?
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
我尝试过扩大设置,但这是所有方法中最慢的。有什么想法吗?
1 个回答
1
感谢用户1827356的帮助,我通过把操作移出apply,速度提升了100倍。之前使用first的时候,按Group列分组时出现了问题,所以我改用了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