猿问

使用merge和groupby将DF引入新方案

我有一个有很多条目的DF。DF 的摘录如下所示。


DF_OLD =

...

sID   tID   NER      token           Prediction

274   79    U-Peop   khrushchev      Live_In-ARG2+B

274   79    O        's              Live_IN-ARG2+L

807   53    U-Loc    louisiana       Live_IN-ARG2+U

807   56    B-Peop   earl            Live_IN-ARG1+B

807   57    L-Peop   long            Live_IN-ARG1+L

807   13    B-Peop   dwight          Live_IN-ARG1+B

807   13    I-Peop   d.              Live_IN-ARG1+I

807   13    L-Peop   eisenhower      Live_IN-ARG1+L

...

该列sID将不同的句子分开。该列Prediction显示了机器学习分类器的结果。这些可能很荒谬。我的目标是按照以下方案将所有预测的标签分组:


DF_Expected =

...

sID   entity1              tID1    entity2           tID2   Relation

274   NaN                  NaN     khrushchev 's     79     Live_In 

807   earl long            56 57   louisiana         53     Live_In

807   dwight d. eisenhower 13      louisiana         53     Live_In

...

“-ARGX-”部分显示实体在表中的位置,而第一个“-”之前的部分显示关系。如果缺少参数部分之一,则相应的单元格应为空。


这是我尝试过的:


DF["Live_In_Predict_Split"] = DF["Prediction"].str.split("+").str[0]

DF["token2"] = DF["token"]

DF["tokenID2"] = DF["tokenID"]

DF["Live_In_Predict2"] = DF["Live_In_Predict"]

data_tokeni_map =   DF.groupby(["Live_In_Predict_Split","sentenceID"],as_index=True, sort=False).agg(" ".join).reset_index()

s = data_tokeni_map.loc[:,['sentenceID','token2',"tokenID2","Live_In_Predict2"]].merge(data_tokeni_map.loc[:,['sentenceID','token',"tokenID","Live_In_Predict"]],on='sentenceID')                      

s = s.loc[s.token2!=s.token].drop_duplicates()

我缺少某种计数器来区分不同的“-ARGX-”和某种 GroupBy 函数(GroupingBy tokenID 不智能,因为它会产生错误的结果)。因此,我的新DF错误:


DF_EDITED =

...

sID   entity1                         tID1      entity2                     tID2   ...

807   dwight d eisenhower earl long  13 56 57   louisiana                    53   

807   louisiana                      13 56 57  dwight d eisenhower earl long 53   



BIG阳
浏览 177回答 2
2回答
随时随地看视频慕课网APP

相关分类

Python
我要回答