如何用循环实现DataFrame多列过滤条件的全组合计算
解决方法
首先修正你原函数的语法错误(过滤条件的括号未闭合):
def df_filter(df, col_key1, col_key2, col_key3, a, b, c): df1 = df[(df[col_key1]==a) & (df[col_key2]==b) & (df[col_key3]==c)] # 补全右括号 df1 = df1.groupby(by=['ID'])['satisfaction'].mean() return df1
方法一:循环遍历所有参数组合
因为key1、key2、key3的参数都是0或1,所有可能的组合可以用itertools.product生成,再循环调用函数保存结果:
import itertools # 生成所有0和1的三元组合 all_combinations = list(itertools.product([0,1], repeat=3)) # 用字典存储每个组合对应的结果 results = {} for a, b, c in all_combinations: combo_key = (a, b, c) results[combo_key] = df_filter(df, 'key1', 'key2', 'key3', a, b, c) # 示例:查看(1,0,0)组合的结果 print(results[(1,0,0)])
方法二:用Pandas GroupBy批量处理(更高效)
不需要循环调用函数,直接按key1、key2、key3和ID分组计算均值,一次性得到所有组合的结果,性能更优:
# 按key1、key2、key3、ID分组,计算satisfaction的均值 all_results = df.groupby(['key1', 'key2', 'key3', 'ID'])['satisfaction'].mean() # 示例:查看key1=1, key2=0, key3=0的结果 print(all_results.loc[(1,0,0)])
这种方式避免了多次重复的过滤和分组操作,数据量越大,对比循环的效率优势越明显。
内容的提问来源于stack exchange,提问作者Maite89
相关产品推荐
相关产品推荐

