首页 > 解决方案 > 如何在执行比较时忽略 Nan

问题描述

我有如下熊猫数据框,

    Location    Loc_Code    Service_Onroad  Service_Cargo
0   Bangalore   Vadakara01  Common  Common
1   Bangalore   Hosdung02   Transit Transit
2   Bangalore   Hosdung02   Common  Transit
3   Bangalore   Kozhikode   Common  Common
4   Bangalore   Malappuram  Transit Transit
5   Bangalore   Kalpetta09  Common  Common
6   Bangalore   Kasargod    Transit Transit
7   Bangalore   Maananthavaadi  Common  Common
8   Bangalore   Alattur Transit Transit
9   Bangalore   Pazhani Common  NaN
10  Bangalore   Ernakulam   Transit Transit
11  Bangalore   Aluva   Connect Connect
12  Bangalore   Kochi   Common  Transit
13  Bangalore   Kochi   Transit Transit
14  Bangalore   Paravoor    Common  Common
15  Bangalore   Chaavakkaad Transit Transit
16  Bangalore   Tirur   Transit Transit
17  Bangalore   Mannaarkkad Common  Common
18  Bangalore   Koramangala NaN NaN
19  Bangalore   Rajna   NaN NaN
20  Bangalore   Palai09 Interconnect    NaN
21  Bangalore   Palai09 Common  NaN

​我想比较Service_OnroadService_Cargo如果匹配,我想Matched在新列(即结果)中将其写为“”。如果不匹配,我想把它写成“ Not Matched”。在任何列 ( Service_Onroad& Service_Cargo) 中,如果值为 NaN,那么我不想在那里写任何东西。

我们如何进行比较?我相信在Pandas中, Nan 也被用作比较结果为“FALSE”的字符串?那么我们如何排除这种情况呢?

标签: pythonpandas

解决方案


试试这个:

df['Match'] = np.where((df['Service_Onroad']==df['Service_Cargo']), 'Matched', 'Non-Matched')
df['Match'] = np.where((df['Service_Onroad'].isna()) | (df['Service_Cargo'].isna()), '', df['Match'])
print(df)

     Location        Loc_Code Service_Onroad Service_Cargo        Match
0   Bangalore      Vadakara01         Common        Common      Matched
1   Bangalore       Hosdung02        Transit       Transit      Matched
2   Bangalore       Hosdung02         Common       Transit  Non-Matched
3   Bangalore       Kozhikode         Common        Common      Matched
4   Bangalore      Malappuram        Transit       Transit      Matched
5   Bangalore      Kalpetta09         Common        Common      Matched
6   Bangalore        Kasargod        Transit       Transit      Matched
7   Bangalore  Maananthavaadi         Common        Common      Matched
8   Bangalore         Alattur        Transit       Transit      Matched
9   Bangalore         Pazhani         Common           NaN
10  Bangalore       Ernakulam        Transit       Transit      Matched
11  Bangalore           Aluva        Connect       Connect      Matched
12  Bangalore           Kochi         Common       Transit  Non-Matched
13  Bangalore           Kochi        Transit       Transit      Matched
14  Bangalore        Paravoor         Common        Common      Matched
15  Bangalore     Chaavakkaad        Transit       Transit      Matched
16  Bangalore           Tirur        Transit       Transit      Matched
17  Bangalore     Mannaarkkad         Common        Common      Matched
18  Bangalore     Koramangala            NaN           NaN
19  Bangalore           Rajna            NaN           NaN
20  Bangalore         Palai09   Interconnect           NaN
21  Bangalore         Palai09         Common           NaN

推荐阅读