如何在pandas中选取另一列的值,并计算所选行的平均值?

4

我正在尝试计算只有在列 Dates 等于 Oct-16 时,得分 1 的平均值:

enter image description here

我最初尝试的方法是:

 import pandas as pd
 import numpy as np
 import os

 dataFrame = pd.read_csv("test.csv")

 for date in dataFrame["Dates"]:
    if date == "Oct-16":
        print(date)##Just checking
        print(dataFrame["Score 1"].mean())

但我的结果是整个列 Score 1 的平均值。

我尝试的另一件事是手动告诉它要计算平均值的索引:

dataFrame["Score 1"].iloc[0:2].mean()

但理想情况下,我希望找到一种方法来实现 Dates == "Oct-16"


1
你想要 df.loc[df['Dates'] == 'Oct-16', 'Score 1'].mean() - EdChum
3个回答

7

遍历行不能充分利用Pandas的优势。如果您想根据另一列的值对某个列执行操作,可以使用.loc[]

dataFrame.loc[dataFrame['Dates'] == 'Oct-16', 'Score 1']

.loc[] 的第一部分使用您指定的条件(dataFrame['Dates'] == 'Oct-16')选择您想要的行。第二部分指定您想要的列(Score 1)。如果要获取平均值,只需在末尾加上 .mean()

dataFrame.loc[dataFrame['Dates'] == 'Oct-16', 'Score 1'].mean()

感谢您的帮助。看起来解决了我遇到的问题。 - Quinnystar27

2
所有日期的平均值怎么样?
dataframe.groupby('Dates').['Score 1'].mean()

1
import pandas as pd
import numpy as np
import os

dataFrame = pd.read_csv("test.csv")

dates = dataFrame["Dates"]
score1s = dataFrame["Score 1"]
result = []

for i in range(0,len(dates)):
    if dates[i] == "Oct-16":
        result.append(score1s[i])

print(result.mean())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接