如何获取Pandas DataFrame各列唯一值的出现位置?
19 20 0.5841 1.0596 0.7043 0.6657
## 方案1:高效分组法(适合大数据集) 利用Pandas的`groupby`和其`groups`属性,这是处理大规模数据时效率较高的方式: ```python import pandas as pd # 假设你的DataFrame名为df column_results = {} for col in df.columns: # 按列值分组,获取每个值对应的索引集合 value_groups = df.groupby(col).groups # 转换为你想要的格式:单个位置返回数字,多个位置返回元组 col_result = { val: tuple(idx) if len(idx) > 1 else idx[0] for val, idx in value_groups.items() } column_results[col] = col_result
运行后,column_results[1]就会得到你想要的格式:{0.4784: (0, 16), 0.6180: 1, 0.6735: 2, ...}
方案2:直观遍历法(可读性更强)
如果你更看重代码的易读性,这个方式逻辑更直白,也是你目前在使用的方案:
import pandas as pd column_results = {} for col in df.columns: unique_values = df[col].unique() col_result = {} for val in unique_values: # 获取当前值对应的所有行索引 indices = df.index[df[col] == val].tolist() # 处理单个索引的情况 col_result[val] = indices if len(indices) > 1 else indices[0] column_results[col] = col_result
这个方法每一步都清晰可见,方便调试和理解,完全符合你想要的输出格式。
补充说明:感谢@chris和@jazrael提供的解决方案,其中@chris的第二个方案因为可读性更强,我正在使用它。
内容的提问来源于stack exchange,提问作者WhySoSerious
相关产品推荐
相关产品推荐

