Замените значения в столбце C, где значение в столбце A равно x
вопрос
В процессе замены нулевых значений, чтобы столбец был логическим, мы находим нулевые значения в fireplace_count
колонка.
Если fireplaceflag
значение False
fireplace_count
null
значение должно быть заменено на 0
написано для панд
df_train.loc[(df_train.fireplace_count.isnull()) & (df_train.fireplaceflag==False),'fireplace_count'] = 0
3 ответа
Я предлагаю использовать df.fillna() и поместить имя столбца в метод, чтобы нацелить его, например:
df['<column_name>']=df.<columnname>.fillna(<new_value>)
Вы бы поместили новое значение, в которое вы хотите изменить нулевые значения, в круглые скобки. В вашем случае это "0". Давайте также упростим проблему, так как это кажется условием для None
значение, если есть False
флаг.
Я собираюсь использовать серию, которую вы прислали мне ранее, с одним небольшим изменением.
import cudf
df = cudf.DataFrame({'basement_flag': [1, 1, 1, 0],
'basementsqft': [400,750,500,0],
'fireplace_count': [2, None, None, 1], #<-- added a None to illustrate the targeted nature of the solution
'fireplaceflag': [10, None, None, 8]})
print(df)
df['fireplace_count']=df.fireplace_count.fillna(0) #<-- This is the solution. It changes only the values in the column of interest, which is what you explained that you needed
print(df)
Выход будет:
basement_flag basementsqft fireplace_count fireplaceflag
0 1 400 2 10
1 1 750
2 1 500
3 0 0 1 8
basement_flag basementsqft fireplace_count fireplaceflag
0 1 400 2 10
1 1 750 0
2 1 500 0
3 0 0 1 8
существует также...
df['fireplace_count'] = df['fireplace_count'].fillna(0)
df['fireplaceflag']= df['fireplaceflag'].fillna(-1)
df['fireplaceflag'] = df['fireplaceflag'].masked_assign(1, df['fireplace_count'] > 0)
Это должно работать для любых странных случаев, основанных на том, что я думаю, что ваш вопрос (Спасибо, Рой F @ NVIDIA)
Дайте мне знать, если это работает для вас, или если вам нужна дополнительная помощь!
что мы пытаемся сделать
В строках где значение в fireplaceflag
столбец False
(т.е. камина нет), поменяйте null
значения в fireplace_count
столбец к 0
код панды из исходного вопроса
df_train.loc[(df_train.fireplace_count.isnull()) & (df_train.fireplaceflag==False),'fireplace_count'] = 0
переведено на Кадф
df_train['fireplace_count'] = df_train['fireplace_count'].masked_assign(0, (df_train['fireplace_count'].isna() == True) & (df_train['fireplaceflag'] == False))
Принятый ответ использования fillna
работает для этого конкретного примера, но обобщенная версия в ответе не будет работать для вопроса в заголовке с cuDF 0,9.
CuDF теперь поддерживает __setitem__()
метод. Обобщенный сценарий
"В строках, где значение в column_a
является X
установите значение в column_b
в Y
", лучше всего сделать что-то вроде следующего:
import cudf
df = cudf.DataFrame({'basement_flag': [1, 1, 1, 0],
'basementsqft': [400,750,500,0],
'fireplace_count': [2, None, None, 1], #<-- added a None to illustrate the targeted nature of the solution
'fireplaceflag': [10, None, None, 8]})
print(df)
mask = df.fireplaceflag.isnull()
df.loc[mask, 'fireplace_count'] = 0
print(df)
basement_flag basementsqft fireplace_count fireplaceflag
0 1 400 2 10
1 1 750 null null
2 1 500 null null
3 0 0 1 8
basement_flag basementsqft fireplace_count fireplaceflag
0 1 400 2 10
1 1 750 0 null
2 1 500 0 null
3 0 0 1 8