通过numpy阵列迭代以在字典中使用



我有一个项目,我正在尝试将数据框架更新为一组新的更改。当前数据框中有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)

最新更新