如何在Pandas DataFrame中使用applymap并传入多列作为参数?
解决DataFrame按行多列条件着色的问题
要实现同时基于level和title两列的条件为整行着色,你需要替换applymap为apply方法(指定axis=1处理整行),这样你的条件函数就能获取整行的所有列数据。
修正后的完整代码
import pandas as pd # 创建示例DataFrame df = pd.DataFrame({ 'level': ['Level 1', 'Level 1', 'Level 2', 'Level 2'], 'title': ['abc', 'def', 'ghi', 'jkl'] }) my_set = set(["Level 1abc"]) def color_condition(row): # 提取当前行的level和title值 level = row['level'] title = row['title'] # 注意:你的集合里是"Level 1abc",对应level+title的拼接结果,原代码写的title+level会不匹配 if level + title in my_set: # 返回整行的样式,每个单元格都应用这个背景色 return ['background-color: #daffd5'] * len(row) else: return ['background-color: #fa6b84'] * len(row) # 使用apply方法,axis=1表示按行处理 styled_df = df.style.apply(color_condition, axis=1) styled_df
关键说明
applymap是逐单元格处理,函数只能获取单个单元格的值,无法访问同一行的其他列;而apply(axis=1)会将整行数据作为参数传入函数,能同时获取该行的所有列值。- 函数返回的是一个与行长度一致的列表,确保该行的每个单元格都应用相同的背景色,实现整行着色。
- 注意拼接顺序:你的目标集合
my_set中的值是Level 1abc,对应level+title的拼接结果,原代码中写的title+level会得到abcLevel 1,无法匹配集合中的值,需要修正拼接顺序。
内容的提问来源于stack exchange,提问作者Labeeb
相关产品推荐
相关产品推荐

