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

优化基于DataFrame索引匹配的分析类型筛选Python实现方案

优化Pandas DataFrame分析类型判断的实现方案

输入数据

import pandas as pd

# 用户提供的数据
fdf = pd.DataFrame(
    columns=['user_data'],
    data=[10,14,1],
    index=['alpha','beta','gamma']
)
# fdf 内容:
#         user_data
# alpha          10
# beta           14
# gamma           1

# 预设的分析支持表
sdf = pd.DataFrame(
    columns=['AD_analysis','BGD_analysis','ABG_analysis'],
    data=[[1,0,1],[0,1,1],[0,1,1],[1,1,0]],
    index=['alpha','beta','gamma','delta']
)
# sdf 内容:
#          AD_analysis  BGD_analysis  ABG_analysis
# alpha              1             0             1
# beta               0             1             1
# gamma              0             1             1
# delta              1             1             0

sdf的规则:某列对应所有用户提供的索引值均为1时,该分析即可运行。例如AD_analysis需要alpha和delta同时存在于fdf索引中才能运行。

需求

根据fdf的索引,筛选出sdf中可运行的分析类型,预期输出为['ABG_analysis']。

原实现问题

原代码依赖大量if判断,写法不够Pythonic,还存在逻辑错误(如误用位运算&代替逻辑运算and、索引存在性判断写法错误):

# 原实现代码
com_idx = fdf.index.intersection(sdf.index)

if len(com_idx)==3 & com_idx.isin('alpha'):
    print('ABG_analysis')
if len(com_idx)==3 & com_idx.isin('delta'):
    print('BGD_analysis')
if len(com_idx)==2 :
    print('AD_analysis')

优化实现方案

利用Pandas向量运算特性,通过列求和直接筛选符合条件的分析类型,代码简洁且扩展性强:

import pandas as pd

# 1. 获取两个DataFrame的共同索引
com_idx = fdf.index.intersection(sdf.index)
# 2. 筛选sdf中共同索引对应的行
filtered_sdf = sdf.loc[com_idx]
# 3. 筛选出所有共同索引都支持的分析类型(列和等于共同索引数量)
valid_analyses = filtered_sdf.columns[filtered_sdf.sum() == len(com_idx)].tolist()

print(valid_analyses)  # 输出: ['ABG_analysis']

逻辑说明

  • sdf中1表示对应索引支持该分析,当某列的和等于共同索引的数量时,说明所有用户提供的索引都支持该分析,该分析即可运行。
  • 此方案无需硬编码索引数量或具体索引名称,新增分析类型或索引时无需修改代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:45:34