python - 如何通过列中的给定值加速循环子集DataFrame并在Python中应用公式
问题描述
我想知道是否有办法加快这段代码:
alphas = []
origins = flows["OrigCodeNew"].unique()
for origin in origins:
df = flows[flows["OrigCodeNew"] == origin]
alpha = sum(df["DestSal"] ** gamma * df["Dist"] ** beta])
alphas.append(1/alpha)
alphas = pd.DataFrame(zip(origins, alphas), columns = ["OrigCodeNew", "alpha"])
其中输入是以下形式的 DataFrame:
OrigCodeNew Destination DestSal Dist
A C 20000 6
A D 30000 8
A E 25000 10
A F 35000 2
B C 20000 7
B D 30000 5
B E 25000 20
B F 35000 13
输出:
OrigCodeNew Alpha (example)
A 0.034
B 0.064
我知道这是低效的代码,可以加快速度,但我不确定如何。我已经使用了一段时间并且它有效,但我正在尝试重构代码以使其更高效。我试图用 agg 函数找出 pandas.groupby ,但还没有弄清楚如何用这种方程来做。任何意见,将不胜感激。
解决方案
您没有提供任何样本数据或预期输出,因此很难回答这个问题。
从理论上讲,您应该能够分组然后使用变换,这会将组值分配给组中的每一行。如果您更习惯使用 agg,您可以计算组值,然后加入原始数据框和“OrigCodeNew”上的聚合。
(
flows
.groupby('OrigCodeNew')
.transform(alpha=lambda x: 1 / (sum(x.DestSal ** gamma * x.Dist ** beta)))
)
推荐阅读
- php - php 短打印标签避免缓冲区使用和捕获
- android - 从片段中的 onLongClick 在对话框中触发 onTouch
- sas - SAS从excel导入日期
- java - 将 Json 字段包装到 pojo 的实例变量中
- ruby-on-rails - 在 ActiveAdmin 中设置自定义页面的标题
- spring - Spring JdbcTemplate 和 @Transactional 不刷新
- jquery - 在 DIV 周围添加链接会破坏 Bootstrap 4 Carousel
- javascript - AWS Javascript SDK:Greengrass createFunctionDefinition
- c++ - hdf5.h Ubuntu和CMake下没有这样的文件或目录
- amazon-web-services - 稳定 | AWS 参数存储 | 一体化