我有一个项目,试图将数据框更新为要推出的一组新更改。当前在数据框中有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]
我明白为什么会发生错误,我只想找到最佳选择。
答案 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)