如何将参数包含到掩码或 Koalas 数据框中的 where 函数中

how to include a parameter into a mask or where function in a Koalas dataframe

我在 Azure 数据块中有一个 Koalas 数据框 运行,假设:

import databricks.koalas   as pd

df = pd.DataFrame({'category': ['A', 'A', 'B'],
                   'col1': [1, 2, 3],
                   'col2': [4, 5, 6]},
                  columns=['category', 'col1', 'col2'])

我想创建一个新列(当前在一个函数中),它根据列的值(有限且已知)评估列,并使用来自另一个数据集列的元素填充新列。 (为什么?,因为第二个数据集包含要包含的参数,并且在用于此数据提取之前已经过过滤)

我试过了(调用 df 和 params 的函数中的代码)

    return      df.assign(col3= df.category.map({
      'A': params['column1'] , 
      'B' : params['column2']  , 
      'C': params['column3']     
    #}) )

错误信息:

PandasNotImplementedError: The method `pd.Index.__iter__()` is not implemented. If you want to collect your data as an NumPy array, use 'to_numpy()' instead.

这很奇怪,因为我没有在任何地方打电话给 Pandas

我也试过了:

    df = df.assign(col3 = None)

    return     df.col3.mask(df.category== 'A', params['column1']) \
                .mask(df.category == 'B' , params['column2'])\
                .mask(df.category == 'C', params['column3'])

在第二种情况下,返回的数据帧具有所有 nan 值。

我也已经将 'compute.ops_on_diff_frames' 设置为 True

我找到了解决此问题的方法,但我仍然不清楚原因。

就我而言,我要执行两个步骤。首先是重置过滤参数数据帧的索引。

params = orig_params.loc[*whatever filtering may fit here*].reset_index()

其次,只使用我们想要的过滤元素。如果不使用此步骤,则屏蔽将要求您输入所需的序列。在这里,我们只是将其转换为标量,例如:

    temp = df.category
    temp = temp.mask(temp == 'A', params['column1'][0]) \
      .mask(temp == 'B' , params['column2'][0])\
      .mask(temp == 'C', params['column3'][0])
    df1 = df.assign(col3 = temp)
    return df1

希望这有用。 如果谁有更好的解决方案and/or请说明post。