Как легко получить следующую операцию на фрейме данных в пандах с меньшим количеством шагов?
Вход:
di = {'col1': ['1', '2', '5',None, None,'10', None,None],
'col2': ['4', '7', None, '8', None, None, '11',None],
'col3': ['9', None, '3', '8', None,None, None,'12'],
'col4': ['abc', 'def', 'ghi', 'jkl', None,'mno', 'pqr',None],
'col5': ['123', None, '456', '789', None,None, None,'012'],
}
df = pd.DataFrame(di, dtype=object)
Входные данные:

Обязательный Ouput dataframe:

Метод, который я использовал:
df.loc[~df.col1.isnull() & df.col2.isnull() & df.col3.isnull(), ['col2','col3']] = 'Hello'
df.loc[df.col1.isnull() & ~df.col2.isnull() & df.col3.isnull(), ['col1','col3']] = 'Hello'
df.loc[df.col1.isnull() & df.col2.isnull() & ~df.col3.isnull(), ['col1','col2']] = 'Hello'
df.loc[~df.col1.isnull() & ~df.col2.isnull() & df.col3.isnull(), ['col3']] = 'Hello'
df.loc[df.col1.isnull() & ~df.col2.isnull() & ~df.col3.isnull(), ['col1']] = 'Hello'
df.loc[~df.col1.isnull() & df.col2.isnull() & ~df.col3.isnull(), ['col2']] = 'Hello'






Я не уверен, правильно ли я вас понял, но если вы хотите заменить все значения None на «Hello», вы можете просто использовать:
df.fillna("Hello")
df.fillna('Hello', inplace=True). Используйте inplace с умом, прочтите об этом.
IIUC:
Вы хотите заполнить нулевые значения, кроме случаев, когда все они являются нулевыми значениями для строки.
m = df.isna().all(1)
df.fillna(‘Hello’).mask(m, df, axis=0)
Ответил с моего телефона
Если вы просто хотите применить его к этим трем столбцам:
cols = ['col1','col2','col3']
df[cols] = df[df.loc[:,cols].notnull().any(axis=1)][cols].fillna('Hello')
df = df.replace(dict({np.nan: None}))
print(df)
col1 col2 col3 col4 col5
0 1 4 9 abc 123
1 2 7 Hello def None
2 5 Hello 3 ghi 456
3 Hello 8 8 jkl 789
4 None None None None None
5 10 Hello Hello mno None
6 Hello 11 Hello pqr None
7 Hello Hello 12 None 012
Спасибо, это работает. Но мне нужно ограничить заполнение нулевых значений этими тремя столбцами, даже если в фрейме данных есть другие столбцы (я обновил свой вопрос)