gpt4 book ai didi

python - 如何在 Pandas 中使用生成器

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

我正在学习使用生成器,但不太了解它们的工作原理。

我想要做的是遍历行并将每行中的一个单元格乘以另一个单元格,然后用结果创建一个新列。

rate = (df['Fee'][i] for df['Fee'] in df / df['Costs'][i] for df['Costs'] in df * 100)

df['rate']=df.iterrows(rate)

以上,我尝试制作一个生成器来计算费用占成本的百分比。

我意识到使用 for 循环会容易得多,但我想了解在这种情况下如何使用生成器。

下面的示例数据框。

          Industry  Expr1        Fee        Costs
Food & Drink June 9970.320 116171.15
Music Industry June 7255.534 131492.59
Manufacturing June 5278.960 171315.01
Music Industry June 6120.596 143688.78
Telecommunications April 4123.986 78733.09

最佳答案

简洁的答案是“你不知道”。或者正如 Pandas 文档所说:

When doing data analysis, as with raw NumPy arrays looping through Series value-by-value is usually not necessary. Series can also be passed into most NumPy methods expecting an ndarray.

这也适用于 DataFrames 和许多其他利用 ndarray 的结构。为了获得更多洞察力,我真的建议您更多地了解 pandas/NumPy/SciPy 的内部工作原理。

关于这个特定主题,我会向您指出 Pandas - Intro to Data Structures - Data Alignment and ArithmeticNumPy - Broadcasting

这些包在幕后使用了大量的 C 代码来优化操作。虽然生成器/迭代器很棒,但它们永远无法匹配这种优化代码。例如,给定您的问题示例,这里是一个简单的测试。

np.all((df.Fee / df.Costs).values == np.array([x / y for x, y in df[['Fee', 'Costs']].values]))
True

%timeit (df.Fee / df.Costs).values
78.5 µs ± 1.88 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

%timeit np.array([x / y for x, y in df[['Fee', 'Costs']].values])
331 µs ± 12.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

如您所见,Pandas 内部使用的内置除法快了约 5 倍。而且样本量非常小。

关于python - 如何在 Pandas 中使用生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48084356/

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