You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生成Pandas DataFrame所有列组合的行非空值占比字典

解决方法

代码实现

import pandas as pd
from itertools import combinations

# 初始化目标DataFrame
d =  {"A" : [3,4,7,6,5,8,None,4,7],
      "B" : ['a',None,'d',None,'j','u','k','k','z'],
      "C" : [4,None,8,4,8,None,2,7,None],
      "D" : [None,9,5,None,2,5,3,None,7],
      "E": ['m','n','l',None,'s','g','s','u','a']}
df = pd.DataFrame(d)

total_rows = len(df)
result = {}

# 生成所有非空列组合(覆盖1列到全列的所有情况)
for i in range(1, len(df.columns)+1):
    for cols in combinations(df.columns, i):
        # 计算该列组合下所有列均非空的有效行数
        valid_row_count = df[list(cols)].dropna().shape[0]
        ratio = valid_row_count / total_rows
        # 将组合归类到对应占比的列表中
        if ratio not in result:
            result[ratio] = []
        result[ratio].append(list(cols))

# 可按需打印或使用结果
for ratio, combos in result.items():
    print(f"{ratio}: {combos}")

代码说明

  • 列组合生成:借助itertools.combinations生成所有非空列子集,确保覆盖从单列到全列的所有可能组合。
  • 有效行数计算:对每个列组合,用dropna()过滤掉存在空值的行,剩余行数即为该组合下的有效行数。
  • 结果字典构建:以非空行占比为键,对应所有具有该占比的列组合列表为值——解决原示例中重复键的问题,避免字典键被覆盖丢失信息。
  • 效率优化:提前计算总行数,避免重复计算冗余操作。

注意事项

原示例中的字典结构存在Python语法问题(字典不允许重复键),因此实际实现调整为键为占比,值为对应列组合的列表,确保完整保留所有组合的占比信息。

内容的提问来源于stack exchange,提问作者chaed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:02:49