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

时间:2017-07-07 21:32:17

标签: python pandas numpy np

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

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

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

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

1 个答案:

答案 0 :(得分:2)

您可以通过在表达式中将两个字符串转换为小写或大写(可以正常工作)来执行第一个测试(因为您不能将任一列重新分配回DataFrame,案例转换只是临时的):

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')