【问题标题】:Pandas - Row mask and 2d ndarray assignementPandas - 行掩码和二维数组分配
【发布时间】:2019-09-25 17:19:33
【问题描述】:

在使用 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 值覆盖。 我想提供一些有关它的信息。

谢谢!

【问题讨论】:

  • 你能发布一些示例数据和预期输出吗?
  • 我添加了一些示例数据! =)
  • 您希望将 my2darray 的第一个元素分配给 df 的第一行,并将第二个元素分配给 df 的最后一行吗?如果可能的话,您能否提供预期的输出?
  • 好吧,我绝对不擅长分享我的问题。我添加了预期的输出! =)

标签: pandas numpy mask


【解决方案1】:

试试这个:

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]

【讨论】:

  • 另外,我看到 dataframe[new_or_exist_column]=pd.Series(my2darray, index=mask[mask==True].index) 在我的情况下就足够了!你拯救了我的一天!
  • @RomainCendre 很高兴为您提供帮助。谢谢。
  • 我只是在我的原始帖子上添加了一些更改。我想给你一些信息,但你给了我主要的想法! =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 2020-09-05
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多