gpt4 book ai didi

python - 如何在 Python Pandas 中对同一数据框中的两列执行操作?

转载 作者:行者123 更新时间:2023-12-03 08:16:01 24 4
gpt4 key购买 nike

我正在尝试应用操作'x-y/y',即x'Faturamento'y 'Custo' 来自名为 'df' 的数据帧,并将结果存储在名为 'Roi' 的新列中。

我尝试使用 apply 函数:

df['Roi'] = df.apply(lambda x, y: x['Faturamento']-y['Custo']/y['Custo'], axis=1)

正在返回:

TypeError: () missing 1 required positional argument: 'y'

我该怎么做?

最佳答案

您可以使用简单算术等语法的列运算。 Pandas 会自动为你对齐索引,这样你每次操作都是逐行操作。

df['Roi'] = (df['Faturamento'] - df['Custo']) / df['Custo']

df['Roi'] = df['Faturamento'] / df['Custo'] - 1

这样,您就可以享受经过优化以快速运行的 Pandas 的快速矢量化处理。如果您在 axis=1 上使用带有 lambda 函数的 .apply(),它只是底层处理中的一个缓慢的 Python 循环,并且速度会很慢。

性能基准

测试 1. 具有 4 行的小型 df

   Faturamento  Custo
0 50 20
1 10 5
2 5 15
3 100 400
%%timeit
df['Roi'] = df.apply(lambda x: (x['Faturamento']-x['Custo'])/x['Custo'], axis=1)

721 µs ± 3.54 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%%timeit
df['Roi'] = df['Faturamento'] / df['Custo'] - 1

490 µs ± 4.83 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

摘要:.apply + lambda 需要 721 µs 而 Pandas 内置需要 490 µs:对于 . 的小数据集,速度提高 1.47 倍。

测试 2. 具有 40000 行的大型 df

df2 = pd.concat([df] * 10000, ignore_index=True)
%%timeit
df2['Roi'] = df2.apply(lambda x: (x['Faturamento']-x['Custo'])/x['Custo'], axis=1)

639 ms ± 3.62 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%%timeit
df2['Roi'] = df2['Faturamento'] / df2['Custo'] - 1

767 µs ± 12.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

摘要:.apply + lambda 需要 639 ms (= 639,000 µs) 而 Pandas 内置需要 767 µs:对于大型数据集,速度提高了 833 倍。

关于python - 如何在 Python Pandas 中对同一数据框中的两列执行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69364743/

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