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

Pandas series case-insensitive matching and partial matching between values

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

df_one['Status'] = np.where(df_one.A.isin(df_two.A), 'Matched','Unmatched')

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

此外,当 df_one.A 中的值以 中的完整字符串结尾时,是否有可能 return 'Matched' df_two.A?例如df_one.A abcdefghijkl -> df_two.A ijkl = 'Matched'

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

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

您可以通过检查 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')