You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:57:02