首页 > 解决方案 > 如何选择数据框中的特定行,对它们进行分组并使用 python 求和?

问题描述

以下是一些示例数据:

mydf = {'Month': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
        'Freq': [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60]
        }
my_df = pd.DataFrame(mydf, columns=['Month', 'Freq'])
my_df

  Month Freq
0   1   5
1   2   10
2   3   15
3   4   20
4   5   25
5   6   30
6   7   35
7   8   40
8   9   45
9   10  50
10  11  55
11  12  60

如何创建一个新的数据框,将月份分组为季节并找到每个季节频率的总和,而输出仍然是一个数据框?

我想要这样的东西:(冬天是月份 = 12、1、2)(春天是月份 = 3、4、5)(等等....)

   Season Freq
0  Winter 75
1  Spring 60
2  Summer 105
3  Autumn 150

我试图选择行并将它们连接起来,但不幸的是我不断收到错误。

标签: pythonpandasdataframepandas-groupby

解决方案


最简单的方法之一是创建一个月到季节的映射器,然后使用mappanda 的函数

season_map = {1: 'Winter', 2: 'Winter', 3: 'Spring', 4: 'Spring', 5: 'Spring', 6: 'Summer', 7: 'Summer', 8: 'Summer', 9:'Autumn', 10:'Autumn', 11: 'Autumn', 12: 'Winter'}
my_df.loc[:, 'season'] = my_df.Month.map(season_map)
my_df.groupby('season').freq.sum()

如果您不想手动创建映射器,可以使用这个答案:Python: Datetime to season


推荐阅读