Pandas如何获取每行最高成交量对应列名并新增为数据列
Pandas 新增每行最高成交量对应列名的实现方案
实现逻辑
先筛选出所有成交量类列,再逐行取成交量最大值对应的列名赋值给新列即可,核心是不要把价格、差值这类非成交量字段拉进来比较。
可直接运行的代码
# 筛出所有列名以Volume开头的成交量列,无需手动硬编码列名 volume_cols = [col for col in df_merged.columns if col.startswith('Volume')] # 逐行取最大值对应的列名写入新列,新列名可以按需修改 df_merged['highest_vol_col'] = df_merged[volume_cols].idxmax(axis=1)
结果说明
针对你给出的样例数据,运行后新列取值完全符合预期:
- 第0行:VolumeOIH值为300.0、VolumeKRE值为51852.0,新列返回
VolumeKRE - 第64行:VolumeOIH值为8677.0、VolumeKRE值为11411.0,新列返回
VolumeKRE - 所有行都会自动对比现有(及后续新增的多个)成交量列的数值,返回数值最高的列名
踩坑提醒
- 不要直接对整个DataFrame调用
idxmax(axis=1),否则会把SPY close、difference这类非成交量列纳入计算,逻辑不符合需求,碰到数值异常的行还会返回完全无关的列名。 - 后续如果新增其他标的的成交量列,只要列名保留
Volume前缀,上述代码不需要做任何修改就能自动适配,不用手动维护成交量列的名单。
内容的提问来源于stack exchange,提问作者pythonheadache
相关产品推荐
相关产品推荐

