大熊猫,有效地计算差异

时间:2015-01-29 19:58:56

标签: python pandas time-series

考虑每个患者的测量数据帧和时间戳

patient     |  timestamp  |  x
A           |  2014-10-10 |  5.7
A           |  2014-10-11 |  6.3
B           |  2014-10-11 |  6.1
B           |  2014-10-10 |  4.1

我的目标是计算d,连续x与最近一次测量中x之间的差异。

根据建议here,这是我使用的代码

df.sort("timestamp", inplace=True)
df['d'] = df.groupby('patient')['x'].transform(pd.Series.diff).fillna(0)

但是,尝试在具有多个度量的数据帧上运行此代码时

patient     |  timestamp  |  x_1  |  ...  |  x_n

使用简单的循环:

df.sort("timestamp", inplace=True)
g=df.groupby('patient')
for x in df.columns:
    if x.find('x')>=0:
       df[x.replace('x','d')] = g[x].transform(pd.Series.diff).fillna(0)

代码非常流畅,

是否有更有效的方法来计算差异向量并将其与测量向量连接?

1 个答案:

答案 0 :(得分:0)

groupby可能是一项昂贵的操作,并且您在循环中多次执行相同的操作。如果可能的话,尽量少用groupby来完成所有计算:

cols = [col in df where col[0] = 'x']
res = df.groupby('patient')[cols].diff().fillna(0)

要连接,首先重命名然后加入:

res = res.rename(columns=(lambda col: 'd'+col[1:]))
df = df.join(res, how='outer')

根据经验,大熊猫和numpy,如果你使用循环,你可能做错了。或者至少以次优的方式。