Замените значения в столбце C, где значение в столбце A равно x

вопрос

В процессе замены нулевых значений, чтобы столбец был логическим, мы находим нулевые значения в fireplace_count колонка.

Если fireplaceflag значение False fireplace_countnull значение должно быть заменено на 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
Другие вопросы по тегам