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
相关产品推荐
相关产品推荐

