如何为DataFrame添加Test列标记指定列的True值情况
Pandas 生成Test列实现方案
需求说明
现有一个Pandas DataFrame,指定列列表col_list内的列值均为布尔类型(True/False)。需要新增一列Test,规则如下:
- 若
col_list中所有列值全为False,Test列写入No Errors - 若至少有一列值为True,将所有值为True的列名(首字母大写)以下划线拼接后写入
Test列
实现方法
方法一:逐行处理(易理解)
适合小数据集,代码逻辑直观:
import pandas as pd # 示例DataFrame df = pd.DataFrame({ 'col1': [True, False, False], 'col2': [False, True, False], 'col3': [True, False, False], 'extra_col': ['x', 'y', 'z'] }) col_list = ['col1', 'col2', 'col3'] def generate_test_entry(row): # 筛选当前行值为True的列名,首字母大写 active_cols = [col.capitalize() for col in col_list if row[col]] return "_".join(active_cols) if active_cols else "No Errors" # 新增Test列 df['Test'] = df.apply(generate_test_entry, axis=1)
方法二:矢量化操作(高效)
针对大数据量优化,避免逐行循环,性能更优:
import pandas as pd # 示例DataFrame df = pd.DataFrame({ 'col1': [True, False, False], 'col2': [False, True, False], 'col3': [True, False, False], 'extra_col': ['x', 'y', 'z'] }) col_list = ['col1', 'col2', 'col3'] # 生成拼接后的列名字符串,去掉末尾多余下划线 true_col_str = df[col_list].dot(df[col_list].columns.str.capitalize() + '_').str.rstrip('_') # 替换空字符串为"No Errors" df['Test'] = true_col_str.where(true_col_str != '', 'No Errors')
输出示例
执行上述代码后,DataFrame结果如下:
| col1 | col2 | col3 | extra_col | Test |
|---|---|---|---|---|
| True | False | True | x | Col1_Col3 |
| False | True | False | y | Col2 |
| False | False | False | z | No Errors |
内容的提问来源于stack exchange,提问作者Θοδωρής Πάλλης
相关产品推荐
相关产品推荐

