根据pandas中不起作用的条件更改行值

问题描述 投票:-1回答:1

我有一个数据帧:

 TYPE              NAME          IS_MAIN
 PPRTYPE           TIME            0
 PPRTYPE           SIGHT           0
 PPRTYPE           SIGHT           1
 PNRDTL            NOT FOUND       1
 PPRTYPE           SIGHT           0 
 PPRTYPE           TIME            1

如果TYPEPPRTYPENAMESIGHTIS_MAIN1那么NAME TYPEPNRDTL应该改为'NOT APPLICABLE'如果IS_MAIN1

注意:任何TYPE的IS_MAIN = 1都只会出现一次。

码:

temp = df.loc[(df['IS_MAIN'] == 1) & (df['TYPE'] == 'PPRTYPE'), 'NAME']
temp = temp.reset_index(drop=True)
temp = temp[0]
if (temp == 'SIGHT'):
     df.loc[(df['TYPE'] == 'PNRDTL') & (df['IS_MAIN'] == 1) , 'NAME'] = 'NOT APPLICABLE'

我面临的问题是

(df['TYPE'] == 'PNRDTL') & (df['IS_MAIN'] == 1)

没有得到任何价值,因此价值不会改变。

如果有人能够发现我犯下的错误或告诉我任何解决方法,我会很高兴。

非常感谢。

python python-3.x pandas dataframe
1个回答
1
投票

对我来说工作:

#if `1` is integer
mask = (df['IS_MAIN'] == 1) & (df['TYPE'] == 'PPRTYPE')
#if 1 is string
#mask = (df['IS_MAIN'] == '1') & (df['TYPE'] == 'PPRTYPE')

if (df.loc[mask, 'NAME'].iloc[0] == 'SIGHT'):
    df.loc[mask , 'NAME'] = 'NOT APPLICABLE'
print (df)
      TYPE            NAME  IS_MAIN
0  PPRTYPE            TIME        0
1  PPRTYPE           SIGHT        0
2  PPRTYPE  NOT APPLICABLE        1
3   PNRDTL       NOT FOUND        1
4  PPRTYPE           SIGHT        0
5  PPRTYPE  NOT APPLICABLE        1
© www.soinside.com 2019 - 2024. All rights reserved.