我正在研究文本挖掘问题,并使用Pandas进行文本处理。从下面的示例中,我只需要选择那些在同一类别(cat
)中具有最大跨度(start
-end
)的行
给定此数据帧:
name start end cat
0 coumadin 0 8 DRUG
1 albuterol 18 27 DRUG
2 albuterol sulfate 18 35 DRUG
3 sulfate 28 35 DRUG
4 2.5 36 39 STRENGTH
5 2.5 mg 36 42 STRENGTH
6 2.5 mg /3 ml 36 48 STRENGTH
7 0.083 50 55 STRENGTH
8 0.083 % 50 57 STRENGTH
9 2.5 mg /3 ml (0.083 %) 36 58 STRENGTH
10 solution 59 67 FORM
11 solution for nebulization 59 84 FORM
12 nebulization 72 84 ROUTE
13 one (1) 90 97 FREQUENCY
14 neb 98 101 ROUTE
15 neb inhalation 98 112 ROUTE
16 inhalation 102 112 ROUTE
17 q4h 113 116 FREQUENCY
18 every 118 123 FREQUENCY
19 every 4 hours 118 131 FREQUENCY
20 q4h (every 4 hours) 113 132 FREQUENCY
21 q4h (every 4 hours) as needed 113 142 FREQUENCY
22 as needed 133 142 FREQUENCY
23 dyspnea 147 154 REASON
我需要得到以下信息:
name start end cat
0 coumadin 0 8 DRUG
2 albuterol sulfate 18 35 DRUG
9 2.5 mg /3 ml (0.083 %) 36 58 STRENGTH
11 solution for nebulization 59 84 FORM
13 one (1) 90 97 FREQUENCY
15 neb inhalation 98 112 ROUTE
21 q4h (every 4 hours) as needed 113 142 FREQUENCY
23 dyspnea 147 154 REASON
我尝试的是按类别groupby
,然后计算最大差值(end
-start
)。然而,我被困在如何找到最大跨度为同一实体之间的类别。我想这应该不是很棘手
评论
谢谢大家的建议,但我需要在每个类别内的所有可能的实体。例如,在药物中,有两种相关的药物:coumadin
和albuterol sulfate
,以及它们的一些部分(albuterol
和sulfate
)。我只需要删除(albuterol
和sulfate
),同时保留coumadin
和albuterol sulfate
。其他类别的逻辑相同。你知道吗
例如,行4-8都是完整行9的位,因此我只需要保留行9。行1和3是行2的一部分,因此我需要保留行2(除了行0之外)。等等
显然,所有的组成部分(“位”)都在max范围内,但问题是要找到同一实体及其组成部分的max(或统一范围)
评论2
一个可能的解决方案是:在同一个类别cat
中找到所有重叠的区间,然后选择最大的区间。我正在努力实现,但到目前为止运气不好。你知道吗
可能的解决方案
我按升序和降序对列进行排序:
你知道吗df.sort\u值(按=[1,2],升序=[True,False])
0 1 2 3
0 coumadin 0 8 DRUG
2 albuterol sulfate 18 35 DRUG
1 albuterol 18 27 DRUG
3 sulfate 28 35 DRUG
9 2.5 mg /3 ml (0.083 %) 36 58 STRENGTH
6 2.5 mg /3 ml 36 48 STRENGTH
5 2.5 mg 36 42 STRENGTH
4 2.5 36 39 STRENGTH
8 0.083 % 50 57 STRENGTH
7 0.083 50 55 STRENGTH
11 solution for nebulization 59 84 FORM
10 solution 59 67 FORM
12 nebulization 72 84 ROUTE
13 one (1) 90 97 FREQUENCY
15 neb inhalation 98 112 ROUTE
14 neb 98 101 ROUTE
16 inhalation 102 112 ROUTE
21 q4h (every 4 hours) as needed 113 142 FREQUENCY
20 q4h (every 4 hours) 113 132 FREQUENCY
17 q4h 113 116 FREQUENCY
19 every 4 hours 118 131 FREQUENCY
18 every 118 123 FREQUENCY
22 as needed 133 142 FREQUENCY
23 dyspnea 147 154 REASON
它将相关行放在第一位,但是,我仍然需要过滤掉不相关的行。。。。你知道吗
我在你的df样品上试过这个:
创建示例数据框:
做一个有助于识别相似名字的函数
将此函数应用于列的值
计算进入匹配项的行数
将“Count”为1的df保留为包含其他行的行:
然后可以删除不必要的列:)
相关问题 更多 >
编程相关推荐