替换 C 列中的值,其中 A 列中的值为 x
Replace values in Column C where value in Column A is x
问题
在替换空值以使列为布尔值的过程中,我们在 fireplace_count
列中找到了空值。
如果 fireplaceflag
值为 False
,则 fireplace_count
null
值应替换为 0
为pandas
而写
df_train.loc[(df_train.fireplace_count.isnull()) & (df_train.fireplaceflag==False),'fireplace_count'] = 0
我建议使用 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)
根据我认为你的问题,这应该适用于任何奇怪的情况(感谢 Roy F @ NVIDIA)
让我知道这是否适合您,或者您是否需要更多帮助!
我们正在努力做什么
在 fireplaceflag
列中的值为 False
的行中(即没有壁炉),将 fireplace_count
列中的 null
值更改为 0
pandas 来自初始问题的代码
df_train.loc[(df_train.fireplace_count.isnull()) & (df_train.fireplaceflag==False),'fireplace_count'] = 0
翻译成 cudf
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__()
方法。
的一般情况
"In rows where the value in column_a
is X
, set the value in column_b
to 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
问题
在替换空值以使列为布尔值的过程中,我们在 fireplace_count
列中找到了空值。
如果 fireplaceflag
值为 False
,则 fireplace_count
null
值应替换为 0
为pandas
而写df_train.loc[(df_train.fireplace_count.isnull()) & (df_train.fireplaceflag==False),'fireplace_count'] = 0
我建议使用 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)
根据我认为你的问题,这应该适用于任何奇怪的情况(感谢 Roy F @ NVIDIA)
让我知道这是否适合您,或者您是否需要更多帮助!
我们正在努力做什么
在 fireplaceflag
列中的值为 False
的行中(即没有壁炉),将 fireplace_count
列中的 null
值更改为 0
pandas 来自初始问题的代码
df_train.loc[(df_train.fireplace_count.isnull()) & (df_train.fireplaceflag==False),'fireplace_count'] = 0
翻译成 cudf
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__()
方法。
"In rows where the value in column_a
is X
, set the value in column_b
to 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