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

嵌套for循环构建多层字典式pd.DataFrame时过滤结果异常如何解决?

问题:嵌套字典中Pandas DataFrame过滤结果不符合预期

你试图构建一个嵌套字典,让cities[city][letter]['df']返回匹配对应city和letter的DataFrame,但实际所有城市的同字母条目都指向最后一次循环的结果(LA对应的数据)。

问题根源

你的代码中复用了letters字典里的同一个字典对象。循环里修改inner_dict['df']时,所有引用这个对象的位置都会被覆盖,最终所有城市的同一个letter条目都指向最后一次循环赋值的DataFrame(也就是LA循环时生成的结果)。

解决方案

方案1:修改原循环,每次创建新字典

直接调整循环逻辑,避免复用letters里的字典对象,每次循环生成新的字典存入嵌套结构:

import pandas as pd

data = {
        'city': ['NY', 'LA', 'NY', 'LA', 'NY'],
        'letter': ['A', 'B', 'C', 'A', 'B']
}

cities = {
    'NY': {},
    'LA': {}
}

for city, outer_dict in cities.items():
    for letter in ['A', 'B', 'C']:
        df = pd.DataFrame(data)
        # 合并过滤条件,更高效
        df = df[(df['city'] == city) & (df['letter'] == letter)]
        # 每次创建新的字典,避免对象复用
        outer_dict[letter] = {'df': df}

print(cities['NY']['A'])

方案2:用字典推导式简化代码

用嵌套字典推导式一次性生成结果,代码更简洁且可读性强:

import pandas as pd

data = {
        'city': ['NY', 'LA', 'NY', 'LA', 'NY'],
        'letter': ['A', 'B', 'C', 'A', 'B']
}
df = pd.DataFrame(data)

cities = {
    city: {
        letter: {'df': df[(df['city'] == city) & (df['letter'] == letter)]}
        for letter in ['A', 'B', 'C']
    }
    for city in ['NY', 'LA']
}

print(cities['NY']['A'])

方案3:利用Pandas GroupBy高效处理(适合大数据场景)

如果业务数据量较大,重复过滤DataFrame会浪费性能,用groupby一次性分组后构建字典更高效:

import pandas as pd

data = {
        'city': ['NY', 'LA', 'NY', 'LA', 'NY'],
        'letter': ['A', 'B', 'C', 'A', 'B']
}
df = pd.DataFrame(data)

cities = {}
# 按city和letter分组,直接获取对应分组的DataFrame
for (city, letter), group_df in df.groupby(['city', 'letter']):
    if city not in cities:
        cities[city] = {}
    cities[city][letter] = {'df': group_df}

# 补充没有匹配数据的条目(比如LA的C),保持结构完整性
for city in ['NY', 'LA']:
    for letter in ['A', 'B', 'C']:
        if letter not in cities.get(city, {}):
            cities[city][letter] = {'df': pd.DataFrame(columns=df.columns)}

print(cities['NY']['A'])

以上三种方案都能让cities['NY']['A']正确返回预期的DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:35:48