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

如何用Pandas itertuples实现HS1外层HS2内层的双层迭代

用itertuples实现DataFrame的双层分组迭代并生成带默认值的字典

首先,我完全理解你的需求:你有一个以HS1为索引的DataFrame,想要外层按HS1分组,内层按HS2迭代,最终生成带有预设默认值的字典——其中EUR的字典保留指定默认值,USD的字典用DataFrame中的实际值覆盖默认值。

先把你的DataFrame还原出来,方便后续演示:

import pandas as pd

# 构造你提供的DataFrame
data = {
    'HS2': [3, 2, 3],
    'EffNotional_UnMG': [-10082.91381, -36253.84938, 78693.86806]
}
df = pd.DataFrame(data, index=['EUR', 'USD', 'USD'])
df.index.name = 'HS1'

接下来我们一步步实现你的需求:

步骤1:定义预设的默认字典模板

先把你想要的默认值定义好,后续会基于这个模板更新实际数据:

# 预设每个HS1对应的默认字典
default_templates = {
    'EUR': {'2': 20000.00, '3': 0},
    'USD': {'2': 0, '3': 0}  # USD的默认值先设为0,后续用实际值覆盖
}

步骤2:外层按HS1分组,内层用itertuples迭代

我们先通过groupby(level='HS1')按索引HS1分组,然后对每个分组(子DataFrame)用itertuples()迭代内层的每一行,再根据需求更新默认字典:

result_dict = {}

# 外层迭代:按HS1分组
for hs1, group_df in df.groupby(level='HS1'):
    # 复制默认模板,避免修改原模板
    current_dict = default_templates[hs1].copy()
    
    # 内层迭代:用itertuples遍历当前分组的每一行
    for row in group_df.itertuples():
        # 把HS2转为字符串,匹配字典的key类型
        hs2_key = str(row.HS2)
        # 根据HS1决定是否覆盖默认值:USD用实际值,EUR保留默认
        if hs1 == 'USD':
            current_dict[hs2_key] = row.EffNotional_UnMG
        # 如果是EUR,即使有数据也不覆盖默认值,这里可以根据需求调整
    
    # 把处理好的字典存入结果
    result_dict[hs1] = current_dict

# 输出最终结果
print(result_dict)

运行结果

执行后你会得到期望的输出:

{
    'EUR': {'2': 20000.0, '3': 0},
    'USD': {'2': -36253.84938, '3': 78693.86806}
}

补充说明

  • 如果你希望EUR的HS2=3也用实际值覆盖默认,只需要去掉if hs1 == 'USD'的判断,直接执行current_dict[hs2_key] = row.EffNotional_UnMG即可。
  • itertuples()会返回一个命名元组,你可以通过row.Index获取HS1(索引值),row.HS2和row.EffNotional_UnMG获取对应的列值,非常灵活。

内容的提问来源于stack exchange,提问作者RKG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:52:37