如何实现Pandas DataFrame每行除以主对角线元素并设交点为1?
解决方案
要实现每行除以该行的主对角线元素(让行列标签相同的单元格值为1),你需要先提取每行对应的主对角线元素,再进行除法操作:
提取主对角线元素:使用
lookup方法获取每行中与行索引同名的列对应的值,这就是该行的主对角线元素:diag_vals = cohort_any_action.lookup(cohort_any_action.index, cohort_any_action.columns)执行除法操作:调用
divide方法,将每行的所有元素除以对应行的主对角线元素:result = cohort_any_action.divide(diag_vals, axis=0)
补充说明
- 如果你的DataFrame行索引和列名不完全匹配(比如部分行索引没有对应的列名),
lookup会报错,这种情况可以先筛选出索引和列名的交集再操作:common_labels = cohort_any_action.index.intersection(cohort_any_action.columns) filtered_df = cohort_any_action.loc[common_labels, common_labels] diag_vals = filtered_df.lookup(filtered_df.index, filtered_df.columns) result = filtered_df.divide(diag_vals, axis=0) - 如果主对角线存在0值,除法后会出现
inf或NaN,可以根据需求用replace或fillna处理这些异常值。
内容的提问来源于stack exchange,提问作者bengisu yilmaz
相关产品推荐
相关产品推荐

