Pandas如何根据存储列名列表的列逐行对指定多列求和
错误原因
你之前的两种写法都是将整个test_sum_list列的所有值统一作为列选择列表,没有逐行读取当前行对应的待求和列名,不符合逐行按不同规则求和的需求。
解决方法
逐行处理时先拆分当前行的test_sum_list得到待求和列名,再对对应列的值求和即可,代码如下:
joined_data['Total'] = joined_data.apply( lambda row: row[row['test_sum_list'].split(', ')].sum(), axis=1 )
如果你的test_sum_list里的分隔符格式不统一(有的逗号后有空格、有的没有),可以用兼容性更强的写法:
joined_data['Total'] = joined_data.apply( lambda row: row[[col.strip() for col in row['test_sum_list'].split(',')]].sum(), axis=1 )
完整测试代码(可直接运行验证)
import pandas as pd # 构造示例数据 data = { 'Class': ['A', 'B', 'C'], 'F12_14': [4, 35, 66], 'F15_17': [5, 36, 67], 'F18_20': [6, 37, 68], 'test_sum_list': ['F12_14', 'F12_14, F15_17', 'F12_14, F15_17, F18_20'] } joined_data = pd.DataFrame(data) # 计算Total列 joined_data['Total'] = joined_data.apply( lambda row: row[row['test_sum_list'].split(', ')].sum(), axis=1 ) print(joined_data)
运行后输出结果和你预期的完全一致。
内容的提问来源于stack exchange,提问作者Justin CR
相关产品推荐
相关产品推荐

