pandas 是否根据其他两列的特定范围获取某列的平均值?

2vuwiymt  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(153)

我有4列,如下所示(但总共有50,000个值未在此处显示):

Date        Speed        Area        Incidents
1/1/2016     6.5         Maly            L
1/2/2016     7.7         Maly            H
1/3/2016     14          Maly            H
...
1/1/2017     5.5         Reet            M
1/12/2017    9.8         Reet            M
4/8/2017      3          Reet            H
3/12/2017    5.8         Anlow           L

我需要尝试找到2017年在事故为M的Reet地区记录的平均速度。因此,输出应该是:7.65美元
我完全不知道我错过了什么,到目前为止,我已经尝试使用date_range()和set_index with .describe()来满足我的一般要求,但我不能得到正确的结果。

oymdgrw7

oymdgrw71#

Date转换为日期时间,并将年份与其他列进行聚合,以计算总和:

df['Date'] = pd.to_datetime(df['Date'])
df1 = (df.groupby([df['Date'].dt.year.rename('Year'), 'Area','Incidents']).Speed
         .sum() 
         .reset_index())
ccrfmcuu

ccrfmcuu2#

可以使用masks选择所需的数据,然后取平均值:

import pandas as pd
data = {'Date' : ['1/1/2016', '1/2/2016', '1/3/2016', '1/1/2017', '1/12/2017', '4/8/2017', '3/12/2017'],
        'Speed' : [6.5, 7.7, 14, 5.5, 9.8, 3, 5.8],
        'Area' : ['Maly', 'Maly', 'Maly', 'Reet', 'Reet', 'Reet', 'Anlow'],
        'Incidents':['L', 'H', 'H', 'M', 'M', 'H', 'L']}
df = pd.DataFrame(data)

# Convert the 'date' to datetime and set it as the index

df['Date'] = pd.to_datetime(df['Date'])
df.index = df['Date']

# Create the mask(s) you want and take the mean of the chosen column

mean_wind_speed = df[(df.index.year==2017) & (df.Area=='Reet') & (df.Incidents == 'M')]['Speed'].mean()
print(mean_wind_speed)

输出:

7.65

编辑

您还可以使用query,其中包含一个新的Years列:

df['Year'] = df.index.year
mean_wind_speed = df.query('Year == 2017 and Area == "Reet" and Incidents=="M"')['Speed'].mean()

相关问题