【问题标题】:Calculating Average for specific column in a 2D array计算二维数组中特定列的平均值
【发布时间】:2015-09-04 19:37:57
【问题描述】:

我是 Python 新手,需要您的帮助。我需要计算一个非常大的数组中特定列的平均值。我想使用 numpy.average 函数(对任何其他建议开放),但无法找到通过标题选择列的方法(例如 Flavor_Score 列的平均值):

  Beer_name        Tester    Flavor_Score         Overall_Score

  Coors               Jim      2.0                      3.0
  Sam Adams           Dave     4.0                      4.5
  Becks                Jim     3.5                      3.5
  Coors               Dave     2.0                      2.2
  Becks               Dave     3.5                      3.7

我是否必须转置数组(似乎 pandas 和 numpy 中的行有很多函数,但列的函数相对较少(当然我可能错了)才能完成列的平均计算?

同一个数组的第二个问题:是使用第一个问题的答案(计算平均 Flavor_Score)来计算特定啤酒(不同测试者之间)的平均 Flavor_Score 的最佳方法?

Beer-test="Coors"

for i in Beer_Name():

if i=Beer_test: # recurring average calculation
else: pass

我希望有一个内置函数。

非常感谢您的帮助!

【问题讨论】:

  • 要计算特定列的平均值,请执行 df['Flavor_Score'].mean(),对于特定啤酒:df[df['Beer_Name'] == 'Coors', 'Flavor_Score'].mean()
  • mean() OR average()?
  • @EdChum - 第一行代码完美运行! MEAN 函数是计算平均值还是平均值?第二行代码产生了一个错误它不喜欢 df [df ['Beer_Name']... 我用 df[df.beer_name == "Coors"].Flavor_Score.mean() 替换它并且它起作用了!谢谢你,EdChum!
  • 作为我的问题的延伸:打印列表中所有独特啤酒的 F​​lavor_Score 平均值而不是选择的一种啤酒的最佳方法是什么?我使用 pd.unique(df.beer_name.ravel()) 作为数组创建了一个唯一啤酒名称列表,然后使用 Beer_Name_L=Beer_Name_Arr.tolist() 在列表中传输数组(不确定我是否需要这样做: ))。现在我尝试使用 for in in xrange(len(Beer_Name_L)): beername=Beer_Name_L(i) print df[df.beer_name==beername].Flavor_Score.mean() 打印但收到错误消息“TypeError: 'list'对象不可调用
  • @Toly 您能否检查答案以关闭问题?提前致谢。

标签: arrays numpy pandas average calculated-columns


【解决方案1】:

好的,这是一个如何做到这一点的示例。

# Test data
df = pd.DataFrame({'Beer_name': ['Coors', 'Sam Adams', 'Becks', 'Coors','Becks'], 
                   'Tester': ['Jim', 'Dave', 'Jim', 'Dave', 'Dave'], 
                   'Flavor_Score': [2,4,3.5,2,3.5], 
                   'Overall_Score': [3, 4.5, 3.5, 2.2, 3.7]})  
# Simply call mean on the DataFrame
df.mean()

Flavor_Score     3.00
Overall_Score    3.38

然后你可以使用groupby 功能:

df.groupby('Beer_name').mean()

           Flavor_Score  Overall_Score
Beer_name                             
Becks               3.5            3.6
Coors               2.0            2.6
Sam Adams           4.0            4.5

现在您甚至可以通过测试人员查看它的外观。

df.groupby(['Beer_name','Tester']).mean()

                  Flavor_Score  Overall_Score
Beer_name Tester                             
Becks     Dave             3.5            3.7
          Jim              3.5            3.5
Coors     Dave             2.0            2.2
          Jim              2.0            3.0
Sam Adams Dave             4.0            4.5

好啤酒!

【讨论】:

  • 完美!!轻松优雅!谢谢!
  • 谢谢,如果我的回答满足您的需求,别忘了检查一下。
猜你喜欢
  • 1970-01-01
  • 2013-03-27
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多