我有一个项目,我正在尝试将数据框架更新为一组新的更改。当前数据框中有15,000个数据示例,因此运行时可能会很快成为一个问题。我知道使用numpy矢量化数据框是减少运行时的好方法,但是我遇到了我的numpy数组和词典的问题。
目标是查看col3
中的值,将其用作df_dict
的关键,并使用该字典条目的值乘以col2
并分配给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]
,但我会收到错误 TypeError: unhashable type: 'numpy.ndarray'
我明白了为什么发生错误的原因,我只想找到最好的替代方案。
看起来您需要。
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
您可以使用.map
使用一些更好的解决方案。
所以替换:
df["col1"]=df["col2"].values*df_dict[df["col3"].values]
with:
df["col1"]=df["col2"] * df['col3'].map(df_dict)