Quinnystar27
Quinnystar27

Reputation: 422

How to get mean of rows selected with another column's values in pandas

I am trying to get calculate the mean for Score 1 only if column Dates is equal to Oct-16:

enter image description here

What I originally tried was:

 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())

But my results are the mean for the whole column Score 1

Another thing I tried was manually telling it which indices to calculate the mean for:

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

But ideally I would like to find a way to do it if Dates == "Oct-16".

Upvotes: 4

Views: 10439

Answers (3)

piRSquared
piRSquared

Reputation: 294508

How about the mean for all dates

dataframe.groupby('Dates').['Score 1'].mean()

Upvotes: 2

Raza
Raza

Reputation: 215

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())

Upvotes: 1

ASGM
ASGM

Reputation: 11391

Iterating through the rows doesn't take advantage of Pandas' strengths. If you want to do something with a column based on values of another column, you can use .loc[]:

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

The first part of .loc[] selects the rows you want, using your specified criteria (dataFrame['Dates'] == 'Oct-16'). The second part specifies the column you want (Score 1). Then if you want to get the mean, you can just put .mean() on the end:

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

Upvotes: 7

Related Questions