Python计算字典中值的出现次数
我想在字典里计算国家的出现率。 我正在从CSV文件中读取所有带有for循环的国家。并将其添加到列表中:Python计算字典中值的出现次数,python,list,dictionary,Python,List,Dictionary,我想在字典里计算国家的出现率。 我正在从CSV文件中读取所有带有for循环的国家。并将其添加到列表中: landen = [] landen.append({"Datum": datumbestand, "Land": [land]}) 然后我尝试按日期合并所有国家: scores_unique = {} for item in landen: if item['Datum'] not in scores_unique: scores_unique.update({it
landen = []
landen.append({"Datum": datumbestand, "Land": [land]})
然后我尝试按日期合并所有国家:
scores_unique = {}
for item in landen:
if item['Datum'] not in scores_unique:
scores_unique.update({item['Datum']: item['Land']})
else:
scores_unique[item['Datum']] += item['Land']
当我打印输出时,我得到以下信息(我的一小部分数据):
现在,我想从每一天开始看看发生率最高的国家。比如:
2017-11-20:
USA 10x
SK 3x
IE 2x
2017-11-10
USA 20x
GB 15x
看看每个日期发生的不同。但是我尝试了很长时间,但我无法计算发生的次数并打印出来。您不需要在列表中保留相同项目的重复副本。使用对象直接从CSV读卡器/文件读取每个对象的计数,并将每个计数器键入以下字段中的相应日期: 然后,您可以使用
计数器
对象的most_common
方法来获取每个日期发生次数最多的国家/地区:
for date, counter in d.items():
print(date, counter.most_common(3))
您可以从列表中创建字典,并使用
count()
函数来创建字典
这将大致按以下方式进行:
result_occurrences = {i:scores_unique.count(i) for i in scores_unique}
print result_occurrences
这将在Python2.7中工作。对于Python 3,您可以编写:
result_occurrences = {i:list(scores_unique.values()).count(i) for i in scores_unique}
print(result_occurrences)
另一种方法是使用。这里有一个基于应用值计数的解决方案,即
import pandas as pd
tup= [('2017-11-20', ['US', 'US', 'US', 'US', 'SK', 'SK', 'IE', 'GB',
'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB',
'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB',
'GB', 'GB', 'GB', 'ES', 'ES', 'DE', 'CA', 'CA', 'CA', 'CA', 'CA',
'CA', 'CA', 'CA', 'CA', 'CA']),
('2017-11-10', ['US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US',
'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US',
'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US',
'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US',
'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US',
'US', 'US', 'US', 'US'])]
count = pd.DataFrame(tup).set_index(0)[1].apply(pd.Series.value_counts).stack()
你能提供一个完整的例子来简化测试吗?
result_occurrences = {i:list(scores_unique.values()).count(i) for i in scores_unique}
print(result_occurrences)
import pandas as pd
tup= [('2017-11-20', ['US', 'US', 'US', 'US', 'SK', 'SK', 'IE', 'GB',
'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB',
'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB', 'GB',
'GB', 'GB', 'GB', 'ES', 'ES', 'DE', 'CA', 'CA', 'CA', 'CA', 'CA',
'CA', 'CA', 'CA', 'CA', 'CA']),
('2017-11-10', ['US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US',
'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US',
'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US',
'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US',
'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US', 'US',
'US', 'US', 'US', 'US'])]
count = pd.DataFrame(tup).set_index(0)[1].apply(pd.Series.value_counts).stack()
2017-11-20 CA 10.0
DE 1.0
ES 2.0
GB 28.0
IE 1.0
SK 2.0
US 4.0
2017-11-10 US 61.0
dtype: float64
count.to_dict()
{('2017-11-20', 'ES'): 2.0, ('2017-11-20', 'US'): 4.0, ('2017-11-20', 'CA'): 10.0, ('2017-11-20', 'GB'): 28.0, ('2017-11-20', 'SK'): 2.0, ('2017-11-20', 'IE'): 1.0, ('2017-11-10', 'US'): 61.0, ('2017-11-20', 'DE'): 1.0}