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

我有一个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    ARG

1   Tza        Tuvia Tza             Moscow       ARG1

2   perugia    umbria                perugia      ARG2

3   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)没有工作。有任何想法吗?


紫衣仙女
浏览 190回答 2
2回答

达令说

获取布尔值索引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_idxOut:id  argument1   argument20   True    False1   False   True2   True    False从行中选择值:selected_vals = DF[argument_cols][boolean_idx]selected_valsOut: id            argument1  argument20             Tuvia Tza        NaN1                   NaN    perugia2  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_levelDF Out: id             argument1        argument2        token        ARG0              Tuvia Tza           Moscow          Tza  argument11                 umbria          perugia      perugia  argument22   the associated press           Nelson   associated  argument1您可以使用apply()更改“ ARG”列中的值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python