在pandas中向groupby添加额外行的最快方法

2024-09-29 19:23:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过复制最后一行,然后修改一些值,为dataframe中的每个组创建一个新行。我的方法如下,concat步骤似乎是瓶颈(我也尝试了append)。有什么建议吗?在

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:基本上我有一堆关于不同日期最后一次观察的数据。我要为当前日期的所有组创建最终观察。在

^{pr2}$

如果假设当前日期为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

我试过用放大的方法来设置,这是所有技术中最慢的。有什么想法吗?在


Tags: 方法dataframedfdef步骤建议rowpd
1条回答
网友
1楼 · 发布于 2024-09-29 19:23:41

多亏了用户1827356,我将操作从apply中去掉,从而将速度提高了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

相关问题 更多 >

    热门问题