如何通过Python获取DataFrame中特定值对应的行名和列名
实现方案
完全可以获取DataFrame中特定值对应的行名和列名,以下是可直接运行的实现方式:
方法1:使用stack()(写法最简洁)
利用布尔筛选先把不等于目标值的位置置为空值,再通过stack()过滤掉空值,剩余的索引就是匹配到的行列名组合:
import pandas as pd # 构建示例DataFrame dataframe = pd.DataFrame( [[0,5,2,1,3],[5,0,4,6,7],[2,4,0,8,9],[1,6,8,0,3],[3,7,9,3,0]], columns=["A","B","C","D","E"], index=["A","B","C","D","E"] ) target = 1 # 提取匹配结果 match_pairs = dataframe[dataframe == target].stack().index.tolist()
运行后match_pairs的输出为[('A', 'D'), ('D', 'A')],每个元组的第一个元素是行名,第二个元素是列名,和预期结果完全一致。
方法2:使用numpy.where(适合大数据量场景,性能更好)
通过numpy的位置索引直接定位匹配值的坐标,再映射回DataFrame的行、列名:
import numpy as np row_pos, col_pos = np.where(dataframe == target) match_pairs = list(zip(dataframe.index[row_pos], dataframe.columns[col_pos]))
该方法得到的结果和方法1完全一致,当DataFrame体量较大时运行速度更快。
内容的提问来源于stack exchange,提问作者alireza
相关产品推荐
相关产品推荐

