首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >替换列C中的值,其中列A中的值是x

替换列C中的值,其中列A中的值是x
EN

Stack Overflow用户
提问于 2019-07-23 05:13:16
回答 3查看 220关注 0票数 0

问题

在替换空值以使列成为布尔值的过程中,我们在fireplace_count列中发现了空值。

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

为熊猫写的

代码语言:javascript
运行
复制
df_train.loc[(df_train.fireplace_count.isnull()) & (df_train.fireplaceflag==False),'fireplace_count'] = 0
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-23 06:07:36

我建议使用df.fillna()并将列名放在方法中以针对它,如下所示:

df['<column_name>']=df.<columnname>.fillna(<new_value>)

您可以将想要将空值更改为的新值放入括号中。在您的例子中,这是"0“。让我们也简化这个问题,因为None值的条件似乎是如果有False标志。

我将使用您之前发送给我的系列,但有一个小的更改。

代码语言:javascript
运行
复制
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)

输出将为:

代码语言:javascript
运行
复制
   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

还有..。

代码语言:javascript
运行
复制
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)

如果这对你有效,或者你需要更多的帮助,请告诉我!

票数 1
EN

Stack Overflow用户

发布于 2019-07-25 09:16:27

我们要做的是

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

初始问题中的pandas代码

代码语言:javascript
运行
复制
df_train.loc[(df_train.fireplace_count.isnull()) & (df_train.fireplaceflag==False),'fireplace_count'] = 0

翻译成cudf

代码语言:javascript
运行
复制
df_train['fireplace_count'] = df_train['fireplace_count'].masked_assign(0, (df_train['fireplace_count'].isna() == True) & (df_train['fireplaceflag'] == False))
票数 0
EN

Stack Overflow用户

发布于 2019-08-22 21:59:17

使用fillna的公认答案适用于此特定示例,但从cuDF 0.9开始,答案中的通用版本将不适用于标题中的问题。

cuDF现在支持__setitem__()方法。广义的场景

“在column_a中的值为X的行中,将column_b中的值设置为Y",最好使用如下代码:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57153803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档