全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何在 Pandas 中根据另一列的值动态选取指定列的元素

本文介绍一种高效、向量化的方法,利用 `pd.factorize` 和 numpy 索引,在大型 dataframe 中根据某列指定的列名,从源 dataframe 中按行提取对应列的值。

在实际数据分析中,常遇到“列名由另一列动态决定”的场景:例如,df1['idx'] 存储了要查询的列名(如 "a" 或 "b"),而真实数值存储在另一个结构对齐的 DataFrame df 中。目标是为每一行,依据 df1.idx 的值,从 df 的对应列中取出该行的值——且需兼顾性能,避免 .apply() 或 Python 循环。

以下是最优解法(纯向量化、无显式循环):

import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame({'a': [94, 170, 5],
                   'b': [31, 115, 8]}, index=[11, 12, 13])
df1 = pd.DataFrame({'idx': ["a", "b", "a"]}, index=[11, 12, 13])

# 核心步骤:向量化列查找
idx_codes, col_labels = pd.factorize(df1['idx'])  # 将列名映射为整数编码
# reindex 使 df 行索引与 df1 对齐,并仅保留所需列(去重后)
aligned_df = df.reindex(index=df1.index, columns=col_labels)
# 使用 NumPy 高级索引:每行取 idx_codes[i] 列的值
result = aligned_df.to_numpy()[np.arange(len(df1)), idx_codes]

print(result)  # [ 94 115   5]

将结果作为新列加入 df1:

df1['out'] = result
print(df1)
#     idx  out
# 11   a   94
# 12   b  115
# 13   a    5

为什么高效?

  • pd.factorize 时间复杂度接近 O(n),远优于 map 或 apply;
  • reindex(columns=...) 是列级筛选,不触发行拷贝;
  • to_numpy() + NumPy 高级索引([row_indices, col_indices])是底层 C 实现,内存连续、零 Python 解释开销。

⚠️ 注意事项:

  • 要求 df 与 df1 的索引完全对齐(或至少 df1.index 是 df.index 的子集),否则 reindex(index=...) 会引入 NaN;
  • df1['idx'] 中的列名必须全部存在于 df.columns 中,否则 reindex(columns=...) 会填充 NaN —— 建议提前校验:assert set(df1['idx']).issubset(df.columns);
  • 若存在缺失列名,可改用 df.lookup(df1.index, df1['idx'])(但注意:DataFrame.lookup 在较新 Pandas 版本中已被弃用,且对重复索引支持不佳,不推荐用于生产环境)。

该方法适用于百万级行数据,实测在 100 万行 × 数十列场景下耗时稳定在毫秒级,是处理“列名驱动索引”问题的工业级首选方案。


# python  # 编码  # app  # 为什么 


相关文章: 如何通过虚拟机搭建网站?详细步骤解析  企业微网站怎么做,公司网站和公众号有什么区别?  广德云建站网站建设方案与建站流程优化指南  如何在云服务器上快速搭建个人网站?  如何在Windows服务器上快速搭建网站?  如何快速搭建支持数据库操作的智能建站平台?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  建站主机服务器选型指南与性能优化方案解析  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何高效利用亚马逊云主机搭建企业网站?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  宝塔建站助手安装配置与建站模板使用全流程解析  长沙企业网站制作哪家好,长沙水业集团官方网站?  如何快速搭建安全的FTP站点?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  ,巨量百应是干嘛的?  香港服务器选型指南:免备案配置与高效建站方案解析  ,网页ppt怎么弄成自己的ppt?  建站之星上传入口如何快速找到?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  网站微信制作软件,如何制作微信链接?  免费网站制作appp,免费制作app哪个平台好?  香港服务器租用每月最低只需15元?  如何快速打造个性化非模板自助建站?  在线制作视频的网站有哪些,电脑如何制作视频短片?  如何快速搭建二级域名独立网站?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  建站主机SSH密钥生成步骤及常见问题解答?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  兔展官网 在线制作,怎样制作微信请帖?  如何在阿里云服务器自主搭建网站?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  宝塔面板创建网站无法访问?如何快速排查修复?  网站制作员失业,怎样查看自己网站的注册者?  建站主机系统SEO优化与智能配置核心关键词操作指南  广州建站公司哪家好?十大优质服务商推荐  建站之星代理如何优化在线客服效率?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  济南企业网站制作公司,济南社保单位网上缴费步骤?  建站之星IIS配置教程:代码生成技巧与站点搭建指南  教学论文网站制作软件有哪些,写论文用什么软件 ?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  清除minerd进程的简单方法  如何在万网主机上快速搭建网站?  韩国服务器如何优化跨境访问实现高效连接?  代刷网站制作软件,别人代刷火车票靠谱吗?  建站之星如何优化SEO以实现高效排名?  南平网站制作公司,2025年南平市事业单位报名时间?  linux top下的 minerd 木马清除方法  如何通过NAT技术实现内网高效建站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。