2017-07-07 279 views
0

我有以下操作添加一個狀態,顯示一個數據幀列的列中的任何字符串出現在另一個數據幀的指定列中的位置。它看起來像這樣:Pandas系列大小寫不敏感的匹配和值之間的部分匹配

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

通常情況下,你會使用str.casefold對於這個,但我想沒有矢量化的版本。相反,你可以嘗試'df_one ['A']。str.lower()。isin(df_two ['A']。str.lower())' – ayhan

回答

1

您可以通過在表達式中將這兩個字符串轉換爲小寫或大寫(或者工作)來進行第一次測試(因爲您不會將任何一列重新分配給您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')