首页 > 解决方案 > 通过以下索引连接单词

问题描述

我的命名实体识别有一个按单词拆分的数据集。我想将一些单词组合在一起,而不是在不应该的时候将它们分开。

数据集示例:

print(df[:5])
ID  Word     Start_Idx   End_Idx
1   I          1            2
2   live       4            8
3   in         10           12
4   New        14           17
5   York       18           22

如您所见,纽约被一分为二,但索引仅由 1 分隔,而其他单词索引则由 2(或更多)分隔。

如何编写代码,遍历 End_Idx 和 Start_Idx 并查找以 1 分隔的单词,然后将它们放在一起,因此我可以打印如下数据帧:

print(df[:5])
ID  Word     Start_Idx   End_Idx
1   I          1            2
2   live       4            8
3   in         10           12
4   New York   14           22

标签: pythonpandas

解决方案


您可以移动 End_Idx 列,将其与 Start_Idx 进行比较,然后使用 groupby,如下所示。

df = df.groupby(((df["Start_Idx"]  - df["End_Idx"].shift(1)) > 1).cumsum()).agg({'ID': min, 'Word': ' '.join, 'Start_Idx': min, 'End_Idx': max})

输出:

   ID      Word  Start_Idx  End_Idx
0   1         I          1        2
1   2      live          4        8
2   3        in         10       12
3   4  New York         14       22

推荐阅读