Python遍历DataFrame和字典匹配字符串更新及新增DataFrame数值方法
实现代码
注意不要使用dict作为变量名(Python保留关键字),以下示例中将映射字典命名为name_map,实现函数如下:
import pandas as pd def aggregate_by_name_map(original_df, name_map): # 复制原始数据,避免修改原DataFrame processed_df = original_df.copy() # 遍历映射字典的每一组配置 for key_name, sub_names in name_map.items(): # 计算当前键对应的所有子名称的Value总和 total = processed_df[processed_df['Name'].isin(sub_names)]['Value'].sum() # 无匹配值时可选择跳过,不需要可删除该判断 if total == 0: continue # 检查键是否已存在于Name列 if key_name in processed_df['Name'].values: # 已有对应行则累加数值 processed_df.loc[processed_df['Name'] == key_name, 'Value'] += total else: # 不存在则新增行 new_row = pd.DataFrame({'Name': [key_name], 'Value': [total]}) processed_df = pd.concat([processed_df, new_row], ignore_index=True) return processed_df
测试验证
你给出的场景测试代码如下:
# 模拟读取CSV得到的原始DataFrame df = pd.DataFrame({ 'Name': ['name1', 'name1_b', 'name2_c'], 'Value': [10, 30, 30] }) # 定义映射字典 name_map = {"name1":["name1_a", "name1_b"], "name2":["name2_a", "name2_b", "name2_c"]} # 调用函数 result_df = aggregate_by_name_map(df, name_map) print(result_df)
运行后输出结果为:
Name Value 0 name1 40 1 name1_b 30 2 name2_c 30 3 name2 30
完全符合需求:原有数据行全部保留,name1累加后值为40,新增name2行值为30。
内容的提问来源于stack exchange,提问作者Pame
相关产品推荐
相关产品推荐

