gpt4 book ai didi

python - Pandas - 使用每行中元素的点积创建新的 DataFrame 列

转载 作者:行者123 更新时间:2023-11-28 22:45:24 25 4
gpt4 key购买 nike

我正在尝试使用现有的 DataFrame 并附加一个新列。

假设我有这个 DataFrame(只是一些随机数):

    a           b           c            d          e
0 2.847674 0.890958 -1.785646 -0.648289 1.178657
1 -0.865278 0.696976 1.522485 -0.248514 1.004034
2 -2.229555 -0.037372 -1.380972 -0.880361 -0.532428
3 -0.057895 -2.193053 -0.691445 -0.588935 -0.883624

我想创建一个新列“f”,将每一行乘以一个“成本”向量,例如 [1,0,0,0,0]。因此,对于第 0 行,f 列的输出应为 2.847674。

这是我目前使用的函数:

def addEstimate (df, costs): 
row_iterator = df.iterrows()

for i, row in row_iterator:
df.ix[i, 'f'] = np.dot(costs, df.ix[i])

我正在使用一个包含 15 个元素的向量,超过 20k 行,我发现这非常慢(半小时)。我怀疑使用 iterrowsix 效率低下,但我不确定如何纠正这个问题。

有没有一种方法可以一次性将其应用于整个 DataFrame,而不是遍历行?或者您有其他加快速度的建议吗?

最佳答案

您可以使用 df['f'] = df.dot(costs) 创建新列。

dot 已经是一个 DataFrame 方法:将它作为一个整体应用于 DataFrame 比遍历 DataFrame 并将 np.dot 应用于单个行要快得多。

例如:

>>> df # an example DataFrame
a b c d e
0 0 1 2 3 4
1 12 13 14 15 16
2 24 25 26 27 28
3 36 37 38 39 40

>>> costs = [1, 0, 0, 0, 2]
>>> df['f'] = df.dot(costs)
>>> df
a b c d e f
0 0 1 2 3 4 8
1 12 13 14 15 16 44
2 24 25 26 27 28 80
3 36 37 38 39 40 116

关于python - Pandas - 使用每行中元素的点积创建新的 DataFrame 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28639551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com