2016-08-05 52 views
3

我是新来的Python,并且无法针对某种情况创建正确的循环。For Loop确定加权平均python

我有一个数据框dfclean,其中包含两列:餐厅星级评分"Star_Rating"和总评论数"Review_Count"

我想找到这些星级评分的加权平均数(Star_Rating *(Review_Count /评论总数)),并将它们添加到名为"weightedavg"的新列中。

这里是我迄今为止伴随着我认为我每一步都做笔记:

#get total number of reviews 
totalreviews = dfclean.Review_Count.sum() 

#create empty list to append values to 
weightedavg = [] 

#for loop 
for row in range(len(dfclean)): 
    weightedavg.append(dfclean.Star_Rating[row] * (dfclean.Review_Count[row]/totalreviews)) 

#make a new column in df consisting of weightedavg 
dfclean['weightedavg'] = weightedavg 

任何帮助将不胜感激!

+0

请发表一个示例DataFrame! – Alex

+0

当然!这允许其他人确切地知道你的DataFrame是什么样的。很多时候,那些看起来不重要的事情是。 – Alex

回答

5

你不应该使用for循环。你可以利用广播做以下事情:

dfclean['weightedavg'] = dfclean['Star_Rating'] * dfclean['Review_Count']/dfclean['Review_Count'].sum() 

这比使用Python循环快得多,而且在语法上也更清晰。你可以在the numpy docsthe pandas docs阅读广播。

+0

这个伎俩,谢谢!我会阅读关于广播的文档 – Jesse

+0

@piRSquared哎呀没有从翻译复制全行 - 很好的抓住! – Alex

+1

@Jesse不客气。刚刚看到你的其他问题,并意识到你是新来的SO。如果答案解决了您发布的问题,请将(最佳)答案标记为已接受。这有助于人们知道还有哪些问题需要解决。 – Alex