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
...

Now my goal is for each add_rd in the event column, the associated NaN in the environment column should be replaced with a字符串 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
...


到目前为止我做了什么

I stumbled across df['environment'] = df['environment].fillna('RD') which replaces every NaN (which is not what I am looking for), pd.isnull(df['environment']) which is detecting missing values and 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'

索引缺失或某种迭代器访问 event 列中的等效值。

我试过这个

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

SyntaxError: keyword can't be an expression

这显然没有用。

我看了几个问题,但无法基于答案中的建议。 Black 的问题 Simon 的问题 szli 的问题 Jan Willems Tulp 的问题

那么,如何根据另一列值替换列中的值?

原文由 Martin Müsli 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 799
2 个回答

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

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

 df.loc[df['event'].eq('add_rd') & df['environment'].isnull(), 'environment'] = 'RD'

原文由 jpp 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以考虑使用 where

 df.environment.where((~df.environment.isnull()) & (df.event != 'add_rd'),
                     'RD', inplace=True)

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

原文由 CT Zhu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题