熊猫重复行替换一列值

时间:2021-04-29 17:46:38

标签: python pandas dataframe nlp

我有一个看起来像这样的数据框 train_df(这是一个例子,我有更多的行):

term               text_snippet        abbr   label
Operatiekamer      De OK is open       OK      1

我有另一个数据框 abbr_df 看起来像这样:

abbr    term
OK      Operatiekamer
OK      Operatiekledij

我想要实现的是,我的 train_df 补充了与上面相同的文本片段和缩写,但使用了错误的术语和标签 0。例如:

term               text_snippet        abbr   label
Operatiekamer      De OK is open       OK      1
Operatiekledij     De OK is open       OK      0

我觉得有一种复杂的方法可以实现这一点,但我无法让它发挥作用。谁能帮帮我?

2 个答案:

答案 0 :(得分:1)

您可以使用 pd.mergeabbr_df 的匹配值填充 train_df。当然,标签不会被正确填充,但如果两个数据帧的 apply 不匹配,您可以使用 0 将标签设置为 terms

import pandas as pd

train_df_data = [{'term': 'Operatiekamer', 'text_snippet': 'De OK is open', 'abbr': 'OK', 'label': 1}]
abbr_df_data = [ { "abbr": "OK", "term": "Operatiekamer" }, { "abbr": "OK", "term": "Operatiekledij" } ]
train_df = pd.DataFrame(train_df_data)
abbr_df = pd.DataFrame(abbr_df_data)

df = pd.merge(train_df, abbr_df, on='abbr') # merge dataframes on abbr
df['label'] = df.apply(lambda x: 1 if x.term_x==x.term_y else 0, axis=1) # set labels
df = df.drop(columns=['term_x']).rename(columns={'term_y': 'term'}) #remove redundant column

结果:

<头>
text_snippet 缩写 标签 term
0 德OK打开 OK 1 Operatiekamer
1 德OK打开 OK 0 Operatiekledij

答案 1 :(得分:0)

在合并方面与上一个答案类似的方法,但对列的处理不同:

import pandas as pd
train_df=pd.DataFrame({"term":['Operatiekamer'], "text_snippet":['De OK is open'], "abbr":['OK'],"label":[1]})             
abbr_df=pd.DataFrame({"abbr":['OK','OK'],"term":['Operatiekamer','Operatiekledij']})

train_df=abbr_df.merge(train_df,on=['abbr'],how='inner',suffixes=[None,"_train"])

train_df.loc[train_df.term != train_df.term_train,"label"] = 0
train_df.drop(columns=["term_train"],inplace=True)
train_df