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

pandas如何根据另一DataFrame的索引对指定列求和并返回布尔值

实现方案

步骤说明

  • 首先修正原有列索引匹配逻辑的小问题:原df_lst的Col_Name带Col_前缀,和df实际列名不匹配,需要先去除前缀再做匹配;原有代码中的d.columns属于笔误,应为df.columns
  • 直接利用df_lst已有的Index列定位df的对应列求和
  • 比较求和结果和预期值生成布尔列
  • 用布尔列的聚合结果作为while循环的判断条件

完整可运行代码

import random
import numpy as np
import pandas as pd

# 生成测试数据
a = np.random.randint(12, size=(7, 11))
df = pd.DataFrame(a, ['foo','foo','bar', 'bar', 'bar', 'foo', 'foo'], ['a','b','f','g','h','j' ,'k', 'r', 's', 't', 'z'])

df_lst = pd.DataFrame({'Col_Name': ['Col_g', 'Col_j', 'Col_r', 'Col_s'], 
                   'Expected Value': [100, 90, 122, 111],                                      
                   'Index': [4, 6, 8, 9]})

# (可选)如果需要自动生成Index列,可使用修正后的匹配逻辑
# df_lst['raw_col'] = df_lst['Col_Name'].str.replace('Col_', '', regex=False)
# ind_dict = {k:i for i,k in enumerate(df.columns)}
# df_lst['Index'] = df_lst['raw_col'].map(ind_dict)

# 计算对应列的总和
df_lst['Sum of Col'] = df_lst['Index'].apply(lambda idx: df.iloc[:, idx].sum())
# 生成布尔判断结果
df_lst['Bool'] = df_lst['Sum of Col'] >= df_lst['Expected Value']

# 得到符合要求的输出df
df_out = df_lst.copy()
print(df_out)

# while循环判断逻辑:只要存在1个及以上False就执行操作X
while (~df_out['Bool']).any():
    # 此处写入操作X的业务逻辑
    print("存在未达预期的列,执行操作X")
    break # 示例代码防止死循环,实际场景可根据需求调整

逻辑说明

  • df.iloc[:, idx]:通过索引值定位df的对应列
  • apply方法遍历df_lst每一行的Index值,批量计算对应列的总和
  • (~df_out['Bool']).any():判断是否存在至少一个False,返回True时触发操作X

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:15:00