如何用Pandas匹配月份与年份提取Excel列值并计算月度均值
股票数据筛选与月度平均值计算解决方案
问题背景
给定如下股票交易数据:
| Month | Year | Open | High | Low | Close/Price | Volume |
|---|---|---|---|---|---|---|
| 6 | 2019 | 86.78 | 87.11 | 86.06 | 86.55 | 1507828 |
| 6 | 2019 | 86.63 | 87.23 | 84.81 | 85.06 | 2481284 |
| 6 | 2019 | 85.38 | 85.81 | 84.75 | 85.33 | 2034693 |
| 6 | 2019 | 85.65 | 86.86 | 85.13 | 86.43 | 1394847 |
| 6 | 2019 | 86.66 | 87.74 | 86.66 | 87.55 | 3025379 |
| 7 | 2019 | 88.84 | 89.72 | 87.77 | 88.45 | 4017249 |
| 7 | 2019 | 89.21 | 90 | 87.95 | 88.87 | 2237183 |
| 7 | 2019 | 89.14 | 91.08 | 89.14 | 90.67 | 1647124 |
| 7 | 2019 | 90.39 | 90.95 | 89.07 | 90.59 | 3227673 |
需求为:
- 计算
Open、High、Low、Close/Price列的月度平均值 - 同时按
Month和Year组合提取对应数据
已尝试单独按Month或Year分组,但不知道如何结合两个条件筛选:
df = pd.read_excel('DatosUnited.xlsx') month = df.groupby('Month') year = df.groupby('Year') june2019 = month.get_group("6") year2019 = year.get_group('2019')
解决方案
1. 同时按Month和Year筛选数据
有两种高效实现方式:
方法一:布尔索引直接筛选
直接通过条件组合过滤数据,注意匹配数据类型(如Month是整数类型则用6而非字符串"6"):
df = pd.read_excel('DatosUnited.xlsx') # 筛选2019年6月的所有数据 june_2019 = df[(df['Month'] == 6) & (df['Year'] == 2019)]
方法二:多字段分组后提取
先按Year和Month组合分组,再通过元组定位目标组:
df = pd.read_excel('DatosUnited.xlsx') # 按年份+月份组合分组 year_month_group = df.groupby(['Year', 'Month']) # 提取2019年6月的数据 june_2019 = year_month_group.get_group((2019, 6))
2. 计算月度平均值
基于多字段分组,对指定列计算均值:
df = pd.read_excel('DatosUnited.xlsx') # 按年月分组,计算指定列的平均值 monthly_avg = df.groupby(['Year', 'Month'])[['Open', 'High', 'Low', 'Close/Price']].mean() # 打印结果 print(monthly_avg)
运行后输出结果示例:
Open High Low Close/Price Year Month 2019 6 86.220 86.950000 85.482000 86.184000 7 89.395 90.437500 88.482500 89.645000
内容的提问来源于stack exchange,提问作者Adrián Desentis Flores
相关产品推荐
相关产品推荐

