我想根据条件从现有熊猫创建一个新的熊猫系列。我想获取该系列中的每个值,并将其与五个值的数组进行比较,并以这五个值中最接近的值作为该索引处新列的值。
这是我目前拥有的:
nom_loads = array([-1089.32556032, -873.46034816, -657.595136 , -441.72992384,
-225.86471168])
final_data['FZnom'] = final_data.FZ.apply(lambda x: nom_loads[np.argmax(x - nom_loads)])
但是我得到的列仅为1089.3,即所有行中的nom_loads [0]。以我的理解,lambda函数中的x应该逐行地是final_data.FZ的每个值,但这也许对我而言是不正确的。
本
答案 0 :(得分:1)
我相信你想要
lambda x: nom_loads[np.abs(x - nom_loads).argmin()]
在apply
内,因为您要查找的是最近的值,而不是最远的值。因此,argmax
不是正确的选择。
您可以使用广播方式:
idx = np.abs(final_data.FZ.values[:,None] - nom_loads).argmin(-1)
final_data['FZnom'] = nom_loads[idx]