当前位置: 首页 > 知识库问答 >
问题:

用Dask掩码替换多个值

华欣荣
2023-03-14

incol的值为1时,我有这个Daskmask代码在Dask数据帧中设置3:

ddf['outcol'] = ddf['incol'].mask(ddf['incol'] == 1, 3)

现在,我必须替换给定的50个条件的值,例如:

if `incol` == 1 then set 3
if `incol` == 2 then set 8
: : :
: : :

在一个Dask语句中(不必是mask)是否可以做到这一点?

共有1个答案

闽经纬
2023-03-14

只要这些替换不依赖于不同行之间的值,因此可以按任何顺序应用,就可以使用.map_partitions来实现:

def apply_masks(df):
   # implement the mask logic here, for example
   df['outcol'] = df['incol'].mask(df['incol'] == 1, 3)
   return df

ddf = ddf.map_partitions(apply_masks)

重复应用.mask()可能存在问题,因为它将覆盖以前的结果。如果您的应用程序是这样的,您正在写入同一列outcol,那么您可能需要.replace.map选项(有关这些选项之间区别的良好解释,请参阅此答案)。

因此,在这种情况下,工作流程将是:

import pandas as pd
df = pd.DataFrame(range(10), columns=['incol'])

import dask.dataframe as dd
ddf = dd.from_pandas(df, npartitions=3)

replace_logic = {
    1: 3,
    2: 8,
    3: 2,
    # and so on ...
}

ddf['outcol'] = ddf['incol'].map(replace_logic).fillna(ddf['incol']).astype('int')

print(ddf.compute())
 类似资料:
  • 例如: 在上面的正则表达式中,我们需要检查name属性是否具有值“xyz”。 如果name属性包含“xyz”,那么它应该跳过type=“string”并将掩码9032905776作为***。

  • 我真的不喜欢这样链接命令。有没有另一种方法在一个做?

  • 一旦用户点击掩码映像,我们就允许用户上传自定义映像,如果只有一个掩码映像:https://codepen.io/kidsdial/pen/jjbvon就可以正常工作 要求: 但是如果有多个掩码映像,那么用户也应该能够上传所有掩码映像上的自定义映像[类似https://codepen.io/kidsdial/pen/rrmypr],但是现在它只适用于单个映像.... 2图像代码页:https://c

  • 一旦用户点击掩码映像,我们就允许用户上传自定义映像,如果只有一个掩码映像:https://codepen.io/kidsdial/pen/jjbvon就可以正常工作 要求: 但是如果有多个掩码映像,那么用户也应该能够上传所有掩码映像上的自定义映像[类似https://codepen.io/kidsdial/pen/rrmypr],但是现在它只适用于单个映像.... 2图像代码页:https://c

  • 我试图找到/创建一个位旋转算法,该算法在-bit-count位掩码中生成s的所有

  • 问题内容: 一个非常简单的小问题,但是我不太明白该怎么做。 我需要将’_’的每个实例替换为空格,并将’#’的每个实例替换为空/空。 我已经试过了: 我真的不喜欢这样的链接命令。还有另一种方法可以做到这一点吗? 问题答案: 使用OR运算符(): 您还可以使用字符类: Fiddle 如果您想用一件事替换哈希值,而用另一件事替换下划线,则只需要链接即可。但是,您可以添加一个原型: 但是为什么不连锁呢?我