熊猫:根据其他列的值有条件地替换值

Mar*_*sli 5 python dataframe python-3.x pandas

我有一个数据框(df),如下所示:

                    environment     event   
time                    
2017-04-28 13:08:22     NaN         add_rd  
2017-04-28 08:58:40     NaN         add_rd  
2017-05-03 07:59:35     test        add_env
2017-05-03 08:05:14     prod        add_env
...
Run Code Online (Sandbox Code Playgroud)

现在,我的目标是针对add_rdevent列中的每个列,该列中的关联NaNenvironment应替换为string RD

                    environment     event   
time                    
2017-04-28 13:08:22     RD          add_rd  
2017-04-28 08:58:40     RD          add_rd  
2017-05-03 07:59:35     test        add_env
2017-05-03 08:05:14     prod        add_env
...
Run Code Online (Sandbox Code Playgroud)

我到目前为止所做的

我偶然发现df['environment'] = df['environment].fillna('RD')哪个替换了每个 NaN(这不是我要寻找的),pd.isnull(df['environment'])它正在检测缺失的值,np.where(df['environment'], x,y)这似乎是我想要的但无法正常工作。此外,我是否尝试过

import pandas as pd

for env in df['environment']:
    if pd.isnull(env) and df['event'] == 'add_rd':
        env = 'RD'
Run Code Online (Sandbox Code Playgroud)

缺少索引或某种迭代器来访问event列中的等效值。
我尝试了这个

df['environment'] = np.where(pd.isnull(df['environment']), df['environment'] = 'RD', df['environment'])

SyntaxError: keyword can't be an expression
Run Code Online (Sandbox Code Playgroud)

这显然没有用。

我看了几个问题,但不能以答案中的建议为基础。布莱克的问题 西蒙的问题 szli的问题 简·威廉姆斯· 图尔普的问题

那么,如何基于其他列的值替换一列中的值?

jpp*_*jpp 8

现在我的目标是对于事件列中的每个 add_rd,应将环境列中的关联 NaN 值替换为字符串 RD。

根据@Zero 的评论,使用pd.DataFrame.loc和布尔索引:

df.loc[df['event'].eq('add_rd') & df['environment'].isnull(), 'environment'] = 'RD'
Run Code Online (Sandbox Code Playgroud)


CT *_*Zhu 5

您可以考虑使用where

df.environment.where((~df.environment.isnull()) & (df.event != 'add_rd'),
                     'RD', inplace=True)
Run Code Online (Sandbox Code Playgroud)

如果不满足条件,则将值替换为第二个元素。