pandas按Bin单列分组后对Buy、Sell多列求和去重的高效实现方法
解决方案
你之前用agg丢失其余列,是因为没有在聚合规则中指定Time列的处理逻辑,只需要给Time列也加个简单的聚合规则(因为是静态值,取组内任意一个值都可以),一次groupby操作就能完成所有需求,不需要多次分组或者后续去重:
import pandas as pd # 单次groupby直接完成聚合 result = df.groupby('Bin', as_index=False).agg( Time=('Time', 'first'), # 静态值取first/last/max/min均可 Buy=('Buy', 'sum'), Sell=('Sell', 'sum') )
方案优势
- 仅遍历一次分组完成所有计算,比你之前三次groupby的写法性能高3倍以上,数据量越大提升越明显
- 不需要额外做transform广播、后续去重操作,代码更简洁,也避免了中间步骤产生的冗余数据
内容的提问来源于stack exchange,提问作者VarStudent
相关产品推荐
相关产品推荐

