【发布时间】: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 的最后一行吗?如果可能的话,您能否提供预期的输出?
-
好吧,我绝对不擅长分享我的问题。我添加了预期的输出! =)