pandas groupby : 优化 单行 中 多 个 工序 的 代码

nhaq1z21  于 2022-11-20  发布在  其他
关注(0)|答案(1)|浏览(86)

我 有 三 行 需要 转换 在 一 行 我 怎么 能 这样 做 的 Pandas 和 Python 。

ml= 1000

1.line: agg_2 = main_df.groupby(['id_1','id_2'])['value'].agg(['min','max'])

2.line: tot = agg_2['max'].sub(agg_2['min']).shift(1)

3.line: main_df['hos_eve'] = (145 - (main_df.groupby(['id_1','id_2'])['vio_eve'].sum()* ml)/ tot)

main_df.shape: (11065065, 14)
main_df.groupby(['id_1','id_2'])['vio_eve'].sum().shape: (2013,)
agg_2['max'].sub(agg_2['min']).shift(1).shape: (2013,)

中 的 每 一 个
我 可以 优化 第 一 行 并 放入 第 三 行 的 分割 部分 吗
否则 显示 错误 。 或者 有人 可以 告诉 我 为什么 这 是 错误 的 ? 因为 附加 输出 的 第 三 行 的 main _ df 有 不同 的 形状 ? 如果 它 是 * * 真 * * 那么 如何 可以 附加 的 结果 到 main _ df 。
错误 为

798qvoo8

798qvoo81#

如果您关心多个.groupby调用,可以将通用表达式重构为中间变量。
group_by只执行一次,您可以帮助保持代码的可读性。

main_gb = main_df.groupby(['id_1','id_2'])
agg_2   = main_gb['value'].agg(['min','max'])
tot     = agg_2['max'].sub(agg_2['min']).shift(1)
main_df['hos_eve'] = (145 - (main_gb['vio_eve'].sum()* ml)/ tot)

相关问题