2016-11-08 149 views
1

我已经熊猫数据框如下所示。我想要做的是,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

diff()shift()函数通常用于计算指的是一个或下一个行有所帮助:

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

enter image description here

+0

感谢@Psidom您的快速反应 - 你的解决方案,不仅作品也简洁而优雅! – renjl0810