Pandas - 行掩码和二维数组赋值

Pandas - Row mask and 2d ndarray assignement

pandas 有一些问题,我想我没有正确使用它,我需要一些帮助才能正确使用它。

所以,我得到了一个数据框行的掩码,这个掩码是一个简单的布尔值列表。 我想将二维数组分配给新列或现有列。

mask = some_row_mask()
my2darray = some_operation(dataframe.loc[mask, column])
dataframe.loc[mask, new_or_exist_column] = my2darray
# Also tried this
dataframe.loc[mask, new_or_exist_column] = [f for f in my2darray]

示例数据:

dataframe = pd.DataFrame({'Fun': ['a', 'b', 'a'], 'Data': [10, 20, 30]})
mask = dataframe['Fun']=='a'
my2darray = [[0, 1, 2, 3, 4], [4, 3, 2, 1, 0]]
column = 'Data'
new_or_exist_column = 'NewData'

预期输出

  Fun  Data          NewData

0   a    10  [0, 1, 2, 3, 4]

1   b    20              NaN

2   a    30  [4, 3, 2, 1, 0]

dataframe[mask] 和 my2darray 的行数完全相同,但总是以 :

结尾

ValueError:使用 ndarray 设置时,Mus 具有相等的 len 键和值。

感谢您的帮助!

编辑 - 在上下文中:

我只是增加了一些精度,它是为逐步填充折叠而制作的:我从数据帧的子部分计算并设置一些值。 根据 Parth 的说法,取而代之的是:

dataframe[new_or_exist_column]=pd.Series(my2darray, index=mask[mask==True].index)

我改成了这样:

dataframe.loc[mask, out] = pd.Series([f for f in features], index=mask[mask==True].index)

否则,所有已设置的值都将被 NaN 值覆盖。 我想提供一些有关它的信息。

谢谢!

试试这个:

dataframe[new_or_exist_column]=np.nan
dataframe[new_or_exist_column]=pd.Series(my2darray, index=mask[mask==True].index)

它将给出所需的输出:

Fun  Data          NewData
0   a    10  [0, 1, 2, 3, 4]
1   b    20              NaN
2   a    30  [4, 3, 2, 1, 0]