pandas 如何使用嵌套的for循环创建一个由字典的字典中的键过滤的pd.DataFrame?

5kgi1eie  于 2023-01-11  发布在  其他
关注(0)|答案(1)|浏览(116)

我试图创建一个字典的字典,其中最重要的数据是一个由每个字典的键过滤的PandasDataFrame。因此,dict1_key [dict2_key] ['df ']=一个DataFrame,其中column1 == dict1_key和column2 == dict2_key。在现实生活中,我的数据更复杂,但这个微不足道的例子说明了我的问题:

import pandas as pd

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

letters = {
    'A': {'df': None},
    'B': {'df': None},
    'C': {'df': None}
}

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

for city, outer_dict in cities.items():
    for letter, inner_dict in letters.items():
        df = pd.DataFrame(data)
        df = df[df['city'] == city]
        df = df[df['letter'] == letter]
        inner_dict['df'] = df
        cities[city][letter] = inner_dict

print(cities['NY']['A'])
    • 预期产出:**|城市|字母||-——-|-————-||纽约州|A类|
    • 观察到的输出:**|城市|字母||-——-|-————-||洛杉矶|A类|

我似乎想不出如何重新配置它,使城市['NY']['A']正确地打印出纽约的数据,而不是洛杉矶。

tzcvj98z

tzcvj98z1#

如果我理解的话,我想,你做了一些反转,我不确定这是好的。你用两个字典做循环,但我认为,主循环应该用数据完成。你应该只创建一次df变量,并将其用作主迭代器,接收列'city'和'letter'
第二个问题是构造'cities'结构。因此您覆盖了相同的对象。打印所有'cities'结构,使用:

import json

print(json.dumps(cities, indent=4))

在cities[city][letter] = inner_dict之后执行此打印操作,观察实际更改和覆盖的内容。
我不规则,问题可能是在指针分配。也许指针被分配,但没有可用的数据。
如果我写了什么废话,请纠正我:)

相关问题