熊猫系列申请

时间:2020-06-02 12:58:58

标签: pandas apply

我想根据条件从现有熊猫创建一个新的熊猫系列。我想获取该系列中的每个值,并将其与五个值的数组进行比较,并以这五个值中最接近的值作为该索引处新列的值。

这是我目前拥有的:

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的每个值,但这也许对我而言是不正确的。

1 个答案:

答案 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]
相关问题