Pandas 系列不区分大小写匹配和值之间的部分匹配

use*_*074 4 python numpy np pandas

我有以下操作来添加一个状态,显示一个数据帧列的列中的任何字符串出现在另一个数据帧的指定列中。它看起来像这样:

df_one['Status'] = np.where(df_one.A.isin(df_two.A), 'Matched','Unmatched')
Run Code Online (Sandbox Code Playgroud)

如果字符串大小写不同,这将不匹配。是否可以在不区分大小写的情况下执行此操作?

此外,是否有可能回归“匹配”时的值df_one.A从全字符串结尾df_two.A?例如 df_one.A abcdefghijkl -> df_two.A ijkl = 'Matched'

cma*_*her 6

您可以通过在表达式中将两个字符串转换为小写或大写(两者都可以)来进行第一个测试(因为您没有将任一列重新分配回 DataFrame,大小写转换只是暂时的):

df_one['Status'] = np.where(df_one.A.str.lower().isin(df_two.A.str.lower()), \ 
                            'Matched', 'Unmatched')
Run Code Online (Sandbox Code Playgroud)

您可以通过检查 df_one.A 中的每个字符串是否以 df_two.A 中的任何字符串结尾来执行第二个测试,如下所示(假设您仍然需要不区分大小写的匹配):

df_one['Endswith_Status'] = np.where(df_one.A.str.lower().apply( \
                                      lambda x: any(x.endswith(i) for i in df_two.A.str.lower())), \ 
                                      'Matched', 'Unmatched')
Run Code Online (Sandbox Code Playgroud)