我想根据条件从现有熊猫创建一个新的熊猫系列。我想获取该系列中的每个值,并将其与五个值的数组进行比较,然后将这五个值中的最接近值作为该索引处新列的值。
这是我目前拥有的:
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的每个值,但这也许对我而言是不正确的。
Ben
我相信你想要:
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]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句