Как заполнить пропущенные значения одного столбца, обусловливающие значение другого столбца в Pandas? - PullRequest
0 голосов
/ 09 мая 2020

У меня фрейм данных выглядит следующим образом:

import numpy as np
import pandas as pd
d = {'col1': [np.nan, 19, 32, np.nan, 54, 67], 'col2': [0, 1, 0, 1, 1, 1]}
df = pd.DataFrame(d)

Я хочу заполнить отсутствующие значения в «col1» на основе значений «col2». Для уточнения c: я хочу заполнить отсутствующие значения в «col1» значением 0, если «col2» равно 0, иначе оставьте «col1» как есть. В этом случае мой результат должен выглядеть так:

d_updated = {'col1': [0, 19, 32, np.nan, 54, 67], 'col2': [0, 1, 0, 1, 1, 1]}
df_updated = pd.DataFrame(d_updated)

Чтобы получить вышеуказанный результат, я пытаюсь получить индекс, у которого «col2» имеет значения, равные 0, и использую fillna ():

ix = list(df[df["col2"] == 0].index)
df["col2"].loc[ix].fillna(0, inplace = True)

Однако мой подход не работает, и я не знаю почему. Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Попробуйте использовать loc с логической индексацией:

df.loc[(df['col1'].isna()) & (df['col2'] == 0), 'col1'] = df['col2']

Вывод:

   col1  col2
0   0.0     0
1  19.0     1
2  32.0     0
3   NaN     1
4  54.0     1
5  67.0     1
0 голосов
/ 09 мая 2020
m=(df.col2==0 )&(df.col1.isna())#boolean select using loc

Тогда может выполняться любое из следующих действий:

df.loc[m,'col1']=df.loc[m,'col1'].fillna(0, inplace=True)

or
df.loc[m,'col1'] = df.loc[m,'col1'].replace('nan', np.nan).fillna(0)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...