我有一个有很多条目的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
编辑:
我的代码有点变了。现在,所有无用的预测都被删除,但所有类似的预测都被分组在一起。我需要某种数据预处理算法来匹配这种形式的数据,这意味着我需要计算每个sID
的所有预测并对它们进行排序。你知道吗
DF_OLD_Edit =
...
sID tID NER token Prediction
274 79 U-Peop khrushchev Live_In-ARG2+B_1
274 79 O 's Live_IN-ARG2+L_1
807 53 U-Loc louisiana Live_IN-ARG2+U_1
807 56 B-Peop earl Live_IN-ARG1+B_1
807 57 L-Peop long Live_IN-ARG1+L_1
807 13 B-Peop dwight Live_IN-ARG1+B_2
807 13 I-Peop d. Live_IN-ARG1+I_2
807 13 L-Peop eisenhower Live_IN-ARG1+L_2
...
必须混合使用函数和DF操作。这些方法一点效率都没有,但确实有效。你知道吗
数据:
df
代码:
输出:
由于缺乏技巧,代码很长,但基本上它所做的是
groupby
和merge
,正如您在标题中所建议的那样。希望这有帮助。你知道吗相关问题 更多 >
编程相关推荐