我有N个数据帧,我从每个数据帧中提取df['col'].value_counts()
并将其转换为字典,所以我有:
my_dict = {'key1' : val1, 'key2' : val2, ... , 'keyM' : valM}
如何更新my_dict
,以便:
如果随机的新数据帧D具有与先前数据帧相同的密钥(例如'key1'
),则它将值添加到val1。换句话说,如果对于同一键('key1'
),'key1'
的值是21,而新数据帧的值是18,则字典键值现在应该是'key1' : 39
。 / p>
但是,如果密钥不存在,则应使用相关值创建一个新密钥。
这有意义吗?我觉得我太复杂了...
答案 0 :(得分:4)
collections.Counter
为此而构建。
from collections import Counter
c1 = Counter(my_dict)
c2 = Counter(my_other_dict)
c_sum = c1 + c2
另一方面,您也应该能够在熊猫内执行此操作; value_counts()
返回一个Series
,您应该可以直接add
到其他Series
对象,并使其表现出预期的效果。
答案 1 :(得分:1)
遍历新键的键/值并更新my_dict
。您还应该考虑使用集合模块中的defaultdict
my_dict = {'key1': 21, 'key2': 10}
my_dict2 = {'key1': 18, 'key3': 5}
for k, v in my_dict2.items():
if k in my_dict:
my_dict[k] += v
else:
my_dict[k] = v
使用defaultdict
from collections import defaultdict
my_dict = defaultdict(int, {'key1': 21, 'key2': 10})
my_dict2 = {'key1': 18, 'key3': 5}
for k, v in my_dict2.items():
my_dict[k] += v
答案 2 :(得分:0)
这是另一个也使用collections
的答案:
from collections import defaultdict as ddict
some_list_of_dicts = [
{'val1': 5, 'val2': 3},
{'val1': 2, 'val2': 1, 'val3': 9},
]
my_dict = ddict(int)
for i in some_list_of_dicts:
for key, count in i.items():
my_dict[key] += count
print(dict(my_dict))
引入未知密钥后,defaultdict
中的int
将被初始化为0。