在Pandas数据框组

时间:2016-11-08 18:17:50

标签: python dataframe pandas-groupby

我有Pandas Dataframe,如下所示。我要做的是partition (or groupby) by BlockID, LineID, WordID,然后在每个组中使用current WordStartX - previous (WordStartX + WordWidth)来导出另一列,例如,WordDistance以指示此单词与上一个单词之间的距离。

这篇文章Row operations within a group of a pandas dataframe非常有用,但就我而言,涉及多个列(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**

1 个答案:

答案 0 :(得分:1)

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

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

enter image description here