2016-11-08 228 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