获取具有最大值的键对 (n0, _), (n1, _) ,其键值对分别为 (n0, a), (n0, b) 的字典项

2024-04-20 01:24:59 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们有一个这样的口述:

os_stats = {
    ('USA', 'Mac OS X'): 1,
    ('Mexico', 'iOS'): 3,
    ('USA', 'Windows XP'): 2, 
    ('Germany', 'Windows 7'): 9,
    ('Germany', 'Windows XP'): 7, 
    ('Mexico', 'Windows XP'): 2,
    ...
}

我想要一个像这样的输出:

os_preferences = {
     ('Mexico', 'iOS'): 3, 
     ('USA', 'Windows XP'): 2,
     ('Germany', 'Windows 7'): 9, 
      ...
}

仅列示每个国家的最高值。 我怎样才能做到这一点?你知道吗


Tags: oswindowsmacstats国家xpiospreferences
2条回答

^{}用3行代码完成任务:

import pandas as pd
df = pd.DataFrame(os_stats, index=['index']).transpose()
os_preferences = df[df['index'] == df.groupby(level=[0])['index'].transform(max)].to_dict()['index']

# output:
# {('Mexico', 'iOS'): 3, 
#  ('USA', 'Windows XP'): 2, 
#  ('Germany', 'Windows 7'): 9}

这篇文章的理解是:

{country:{os:count} for (country,os),count in sorted(os_stats.items(), key=lambda rec:rec[1])}

第一部分是:

sorted(os_stats.items(), key=lambda rec:rec[1])

产生:

[(('USA', 'Mac OS X'), 1),
 (('Mexico', 'Windows XP'), 2),
 (('USA', 'Windows XP'), 2),
 (('Mexico', 'iOS'), 3),
 (('Germany', 'Windows XP'), 7),
 (('Germany', 'Windows 7'), 9)]

注意,它是按count字段的升序排序的(rec[1])。你知道吗

其余的只是将数据处理成一个dict,这样做的效果是通过覆盖较小的值来丢弃较小的值。你知道吗

相关问题 更多 >