gpt4 book ai didi

python - 将元组键字典子集到具有基于键的名称的字典中

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:14 25 4
gpt4 key购买 nike

元组键(key0,key1)字典(df_dict)我想子集其中有几个数据帧,每个数据帧都有列dateaccountNum 。我想对 df_dict 进行子集化并根据 key0 生成字典名称。

df_dict = {('100', '001'): date, accountNum, ('100', '002'): date, accountNum, 
('200', '001'): date, accountNum, ('200', '002'): date, accountNum}

df_dict 中的数据帧如下所示,

('100','001')-DataFrame ('100','002')-DataFrame  ('200','001')-DataFrame 
date accountNum date accountNum data accountNum
2010-01-01 280 2010-02-01 150 2010-03-01 330
2010-01-02 285 2010-02-02 155 2010-03-02 335
2010-01-03 290 2010-02-03 160 2010-03-03 340

('200','002')-DataFrame
date accountNum
2010-04-01 510
2010-04-02 515
2010-04-03 520

我期望的结果是这样的,

df_dict_100 = {('100', '001'): date, accountNum, ('100','002'): date, accountNum}
df_dict_200 = {('200', '001'): date, accountNum, ('200','002'): date, accountNum}

每个字典中的数据框将是这样的,

df_dict100 
('100','001')-DataFrame ('100','002')-DataFrame
date accountNum date accountNum
2010-01-01 280 2010-02-01 150
2010-01-02 285 2010-02-02 155
2010-01-03 290 2010-02-03 160

df_dict200
('200','001')-DataFrame ('200','002')-DataFrame
date accountNum date accountNum
2010-01-01 280 2010-04-01 510
2010-01-02 285 2010-04-02 515
2010-01-03 290 2010-04-03 520

这是我的方法,

my_list = ['100','200']
subset_dict = {k: v for k, v in df_dict.items() if k[0] in my_list}

但似乎我从 df_dict 那里得到了准确的字典。

最佳答案

您可以通过创建多级字典将第一种形式转换为类似于第二种形式的形式。因此,您可能拥有 df_dict[100],而不是 df_dict_100,如下所示:

import pprint

date, accountNum = 'date', 'accountNum'
df_dict = {('100', '001'): (date, accountNum), ('100', '002'): (date, accountNum),
('200', '001'): (date, accountNum), ('200', '002'): (date, accountNum)}

new_dict = dict()
for key, value in df_dict.items():
new_dict.setdefault(key[0], {})[key] = value

pprint.pprint(new_dict)

结果是:

{'100': {('100', '001'): ('date', 'accountNum'),
('100', '002'): ('date', 'accountNum')},
'200': {('200', '001'): ('date', 'accountNum'),
('200', '002'): ('date', 'accountNum')}}

要访问单个数据,您可以使用如下语法:

print(new_dict['100']['100', '001'][0])

如果您更喜欢字典理解,请尝试以下操作:

subset_dict = {
matching_key : {
k: v for k, v in df_dict.items() if k[0] == matching_key }
for matching_key in set(k[0] for k in df_dict)
}

在评论中,OP 询问“我可以知道如何生成两个字典,而不是在一个字典中生成两个字典吗?”像这样的东西应该有效:

df_dict_100 = { k: v for k, v in df_dict.items() if k[0] == '100' }
df_dict_200 = { k: v for k, v in df_dict.items() if k[0] == '200' }

将它们放在一个 for 循环中,这是一个完整的程序:

import pprint

date, accountNum = 'date', 'accountNum'
df_dict = {('100', '001'): (date, accountNum), ('100', '002'): (date, accountNum),
('200', '001'): (date, accountNum), ('200', '002'): (date, accountNum)}

my_list = ['100', '200']
for i in my_list:
new_df_dict = { k: v for k, v in df_dict.items() if k[0] == i }
pprint.pprint(new_df_dict)
print("----")

这是输出:

{('100', '001'): ('date', 'accountNum'),
('100', '002'): ('date', 'accountNum')}
----
{('200', '001'): ('date', 'accountNum'),
('200', '002'): ('date', 'accountNum')}
----

关于python - 将元组键字典子集到具有基于键的名称的字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43351147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com