遍历numpy数组以在字典中使用

时间:2019-07-02 13:07:43

标签: python pandas numpy dataframe

我有一个项目,试图将数据框更新为要推出的一组新更改。当前在数据框中有15,000个数据样本,因此运行时可能很快成为一个问题。我知道使用numpy向量化数据帧是减少运行时的好方法,但是我遇到了numpy数组和字典的问题。

目标是查看col3中的值,将其用作df_dict的键,并使用该字典条目的值乘以col2并分配给{ {1}}。

我已经可以使用for循环来做到这一点,但是它遇到了一个严重的运行时问题-尤其是因为涉及的步骤比我要寻求帮助的更多。

col1

我希望将d = {"col1": [1, 2, 3, 4], "col2": [1, 2, 3, 4], "col3": ["a","b","c","d"]} df = pd.DataFrame(data=d) df_dict = {"a":1.2,"b":1.5,"c":0.95,"d":1.25} df["col1"]=df["col2"].values*df_dict[df["col3"].values] 更新为col1,但出现错误 [1.2, 3, 2.85, 5]

我明白为什么会发生错误,我只想找到最佳选择。

2 个答案:

答案 0 :(得分:1)

看起来像您需要的。

d = {"col1": [1, 2, 3, 4], "col2": [1, 2, 3, 4], "col3": ["a","b","c","d"]}
df = pd.DataFrame(data=d)
df_dict = {"a":1.2,"b":1.5,"c":0.95,"d":1.25}

df["col1"]=df["col2"]* [df_dict.get(i, 1) for i in df["col3"]]
print(df)

输出:

   col1  col2 col3
0  1.20     1    a
1  3.00     2    b
2  2.85     3    c
3  5.00     4    d

答案 1 :(得分:0)

您可以使用.map使用更好的解决方案。

所以替换:

df["col1"]=df["col2"].values*df_dict[df["col3"].values]

使用:

df["col1"]=df["col2"] * df['col3'].map(df_dict)