为了账号安全,请及时绑定邮箱和手机立即绑定

比较DF中两列的(子)字符串

比较DF中两列的(子)字符串

紫衣仙女 2021-05-13 18:50:32
我有一个DF,如下所示:DF =id  token      argument1             argument2 1   Tza        Tuvia Tza             Moscow  2   perugia    umbria                perugia    3   associated the associated press  Nelson我现在要比较的列的值argumentX,并token与选择新列的值ARG相应。DF =id  token      argument1             argument2    ARG1   Tza        Tuvia Tza             Moscow       ARG12   perugia    umbria                perugia      ARG23   associated the associated press  Nelson       ARG1这是我尝试过的:conditions = [(DF["token"] == (DF["Argument1"])), DF["token"] == (DF["Argument2"])]choices = ["ARG1", "ARG2"]DF["ARG"] = np.select(conditions, choices, default=nan)这只会比较整个String,如果匹配则匹配。结构,如.isin,.contains或使用辅助列如DF["ARG_cat"] = DF.apply(lambda row: row['token'] in row['argument2'],axis=1)没有工作。有任何想法吗?
查看完整描述

2 回答

?
达令说

TA贡献1821条经验 获得超6个赞

获取布尔值索引


argument_cols = ['argument1', 'argument2']

boolean_idx = DF[argument_cols].apply(

    lambda arg_column: DF['token'].combine(arg_column, lambda token, arg: token in arg)

)


boolean_idx

Out:

id  argument1   argument2

0   True    False

1   False   True

2   True    False

从行中选择值:


selected_vals = DF[argument_cols][boolean_idx]


selected_vals

Out: 

id            argument1  argument2

0             Tuvia Tza        NaN

1                   NaN    perugia

2  the associated press        NaN

堆叠selected_vals并获取包含参数名称的索引级别(如果一行中包含True值的列超过一列,则此代码将失败):


argument_index_level = selected_vals.stack().index.get_level_values(-1)

# Index(['argument1', 'argument2', 'argument1'], dtype='object')


DF['ARG'] = argument_index_level


DF 

Out: 

id             argument1        argument2        token        ARG

0              Tuvia Tza           Moscow          Tza  argument1

1                 umbria          perugia      perugia  argument2

2   the associated press           Nelson   associated  argument1

您可以使用apply()更改“ ARG”列中的值。


查看完整回答
反对 回复 2021-05-25
  • 2 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信