Pandas 数据框组内的计算

Calculation within Pandas dataframe group

我有 Pandas 数据框,如下所示。我想做的是 partition (or groupby) by BlockID, LineID, WordID,然后在每个组中使用 current WordStartX - previous (WordStartX + WordWidth) 派生另一列,例如 WordDistance 来指示这个词和前一个词之间的距离。

这 post 非常有用,但在我的情况下涉及多个列(WordStartX 和 WordWidth)。

 *BlockID  LineID  WordID  WordStartX  WordWidth     WordDistance
0        0       0       0         275        150                 0
1        0       0       1         431         96   431-(275+150)=6        
2        0       0       2         642         90   642-(431+96)=115
3        0       0       3         746        104   746-(642+90)=14
4        1       0       0         273         69         ...
5        1       0       1         352        151         ...
6        1       0       2         510         92
7        1       0       3         647         90
8        1       0       4         752        105**

diff()shift() 函数通常有助于参考上一行或下一行的计算:

df['WordDistance'] = (df.groupby(['BlockID', 'LineID'])
        .apply(lambda g: g['WordStartX'].diff() - g['WordWidth'].shift()).fillna(0).values)