2016-09-20 57 views
0

我有一个熊猫df列,列出每个公司名称的字典列表。如下图所示:如何计算词典列表中第1个和第6个键之间的差异百分比?

company | growth_scores 
comp xyz | [{u'score': u'198', u'recorded_at': u'2016-09},{u'score': u'190', u'recorded_at': u'2016-08} 

我明白了如何提取钥匙和我熟悉的pd.apply方法,但我似乎无法拼凑出任何会去行由行和执行计算。最终,我需要执行计算并将结果存储在每个公司的新列中。

输出应该是这样的:

company | growth_score_diff 
comp xyz | 10% 

会喜欢这里的一些指导!

+0

什么是'1st'和'6th'关键?它是'分数'吗? – jezrael

+0

不完整的字典@凯文。可能这可以理解字典:http://stackoverflow.com/questions/3294889/iterating-over-dictionaries-using-for-loops-in-python –

回答

1

假设你有以下数据框:

df = pd.DataFrame.from_dict({'company': 'Pandology', 'metrics': [[{'score': 10}, {'score': 20}, {'score': 35}]]}) 

,看起来像这样:

enter image description here

要计算总成绩,则可以mapmetrics列名为score_total新列。要执行实际计算,您需要定义一个函数calculate_score,该函数将一行metrics数据作为输入并输出总分值。 (在这种情况下,它只是一个微不足道的总和计算)

def calculate_score(metrics): 
    total_score = 0 
    for metric in metrics: 
     total_score += metric['score'] 
    return total_score     

df['score_total'] = df['metrics'].map(calculate_score) 

现在你有一个包含结果的新列:

enter image description here

+0

嘿@kmandov感谢您的帮助!我遇到的一个问题是,分数实际上是字符串,因此我无法执行计算。有没有办法解决这个问题? – Kevin

+0

您需要将字符串转换为数字值。它可以像下面这样简单:int(metric ['score'])如果分数是整数。这里是你如何做到这一点:http://stackoverflow.com/questions/5608702/how-can-i-convert-a-string-to-either-int-or-float-with-priority-on-int – kmandov

相关问题