如何将布尔类型pandas dataframe转换为方阵格式的dataframe
实现步骤
你可以按照以下步骤处理数据得到目标方阵:
- 先将原始Yes/No格式的布尔DataFrame转为0/1数值格式,再统计各特征组合的出现次数:
import pandas as pd # 假设你的原始DataFrame名为df # 转换Yes/No为0/1 df_num = df.replace({"Yes": 1, "No": 0}) # 按所有布尔列分组统计频次,生成带count列的统计DataFrame df_count = df_num.groupby(['a', 'b', 'c', 'd'], as_index=False).size().rename(columns={'size': 'count'})
如果你已经有带count列的DataFrame,可以直接跳过第一步的分组统计步骤,直接执行第二步的逻辑即可。
- 初始化目标方阵,再按规则映射计数:
# 初始化结果矩阵 res = pd.DataFrame(0, index=['a','b','c','d'], columns=['a','b']) for _, row in df_count.iterrows(): cnt = row['count'] # 处理a列计数 if row['a'] == 1: res.loc['c', 'a'] += cnt # 处理b列计数 if row['b'] == 1: if row['d'] == 1: res.loc['d', 'b'] += cnt else: res.loc['b', 'b'] += cnt # 处理a、b都为0的情况 if row['a'] == 0 and row['b'] == 0: if row['c'] == 1: res.loc['c', 'b'] += cnt
运行上述代码后res就是你需要的目标方阵,如果实际业务的映射逻辑有调整,直接修改循环内的判断规则即可。
内容的提问来源于stack exchange,提问作者Nemra Khalil
相关产品推荐
相关产品推荐

