【发布时间】:2019-02-12 21:38:52
【问题描述】:
我有一个如下所示的数据框 (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
...
现在我的目标是对于event 列中的每个add_rd,environment 列中关联的NaN-值应替换为字符串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
...
到目前为止我做了什么
我偶然发现 df['environment'] = df['environment].fillna('RD') 替换了 every 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'
索引丢失或某种迭代器无法访问event 列中的等效值。
我试过了:
df['environment'] = np.where(pd.isnull(df['environment']), df['environment'] = 'RD', df['environment'])
SyntaxError: keyword can't be an expression
这显然没有用。
我查看了几个问题,但无法以答案中的建议为基础。 Black's questionSimon's questionszli's questionJan Willems Tulp's question
那么,如何根据另一列的值替换一列中的值?
【问题讨论】:
-
使用
df.loc[df['environment'].isnull() & df['event'].eq('add_rd'), 'environment'] = 'RD' -
您的最后一次尝试非常接近 - 我认为您只需将其更改为
df['environment'] = np.where(pd.isnull(df['environment']), 'RD', df['environment']) -
@asongtoruin 我正式失明了 ;) ... 成功了!
标签: python python-3.x pandas dataframe