pandas DataFrame中获取满足条件元素的行列名及整数索引的简化方法
纯pandas简洁实现方案
核心逻辑是通过where把不符合条件的元素置为NaN,再用stack自动删除空值得到符合条件的元素集合,最后补充行列整数索引即可,全程无numpy依赖,代码精简易读。
核心代码示例
import pandas as pd # 替换为你自己的阈值 thres = 10 # 核心实现逻辑 res = df.where(df > thres).stack().reset_index() # 重命名默认生成的列名 res.columns = ["行名", "列名", "对应元素值"] # 补充行列整数索引 res["行整数索引"] = res["行名"].apply(df.index.get_loc) res["列整数索引"] = res["列名"].apply(df.columns.get_loc) # 提取最终需要的4个字段即可 final_res = res[["行名", "行整数索引", "列名", "列整数索引"]]
方案说明
- 若不需要保留元素值,可直接删除
对应元素值列,不影响结果 - 兼容所有自定义行列名场景,无论行索引是字符串、数字还是其他类型都可正常运行
- 性能表现和numpy方案基本持平,中小规模数据下无明显速度差异
- 大数据量场景下可提前构造行列映射字典替代
apply,进一步提升运行效率:idx_map = {v:i for i, v in enumerate(df.index)} col_map = {v:i for i, v in enumerate(df.columns)} res["行整数索引"] = res["行名"].map(idx_map) res["列整数索引"] = res["列名"].map(col_map)
内容的提问来源于stack exchange,提问作者Antonio Sesto
相关产品推荐
相关产品推荐

