替换C列中的值,其中A列中的值为x

时间:2019-07-22 21:13:15

标签: rapids cudf

问题

在替换空值以使列为布尔值的过程中,我们在fireplace_count列中找到空值。

如果fireplaceflag的值为False,则fireplace_count null的值应替换为0

为熊猫而写

df_train.loc[(df_train.fireplace_count.isnull()) & (df_train.fireplaceflag==False),'fireplace_count'] = 0

3 个答案:

答案 0 :(得分: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

让我知道这是否对您有用,或者您需要更多帮助!

答案 1 :(得分:0)

我们正在尝试做什么

fireplaceflag列中的值为False(即没有壁炉)的行中,将null列中的fireplace_count的值更改为{{1 }}

最初问题中的熊猫代码

0

翻译成cudf

df_train.loc[(df_train.fireplace_count.isnull()) & (df_train.fireplaceflag==False),'fireplace_count'] = 0

答案 2 :(得分:0)

使用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