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