次のようなデータフレーム(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
_です。NaN
列の関連するenvironment
- valueは、文字列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
...
_
これまでに行ったこと
everyNaN
(これは私が探しているものではありません)を置き換えるdf['environment'] = df['environment].fillna('RD')
に出会いました、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
_
明らかにうまくいきませんでした。
私はいくつかの質問を検討しましたが、回答の提案に基づいて構築することができませんでした。 黒の質問サイモンの質問szliの質問Jan Willems Tulpの質問
では、別の列の値に基づいて列の値を置き換えるにはどうすればよいですか?
ここでの目標は、イベント列の各add_rdです。環境列の関連するNaN値は、文字列RDで置き換える必要があります。
@Zeroのコメントに従って、 pd.DataFrame.loc
およびブールインデックス:
df.loc[df['event'].eq('add_rd') & df['environment'].isnull(), 'environment'] = 'RD'
where
の使用を検討できます。
df.environment.where((~df.environment.isnull()) & (df.event != 'add_rd'),
'RD', inplace=True)
条件が満たされない場合、値は2番目の要素に置き換えられます。
「add_rd」だけを「RD」に置き換えたい場合は、これが便利です。
keys_to_replace = {'add_rd':'RD','add_env':'simple'}
df['environment'] = df.groupby(['event'])['environment'].fillna(keys_to_replace['add_rd'])
df
出力:
environment event
0 RD add_rd
1 RD add_rd
2 test add_env
3 prod add_env
イベントに基づいて置き換える値が多い場合、groupbyの後に「event」列の値を追加する必要がある場合があります。
keys_to_replace = {'add_rd':'RD','add_env':'simple'}
temp = df.groupby(['event']).apply(lambda x: x['environment'].fillna(keys_to_replace[x['event'].values[0]]))
temp.index = temp.index.droplevel(0)
df['environment'] = temp.sort_index().values
出力:
environment event
0 RD add_rd
1 RD add_rd
2 test add_env
3 prod add_env
ここにあります:
df['environment']=df['environment'].fillna('RD')