pandas数据框的平均值有两个groupby:一个按月份,另一个按参数。

问题描述 投票:0回答:2

一个包含日期(yymmdd形式)、姓名和记录的数据框架,如下所示。

     date name  record
0  200104    A      16
1  200105    B      20
2  200105    A      18
3  200106    B      22
4  200201    A      14
5  200201    B      17
6  200202    A      18
7  200203    B      19

我需要按月份和名称进行分组,取记录的平均值,得到的结果是这样的。

Jan  A  17
     B  21
Feb  A  16
     B  18

请你能帮帮我吗?

python pandas pandas-groupby
2个回答
2
投票

使用 to_datetimeSeries.dt.month_name 和总平均值。

m = pd.to_datetime(df['date'], format='%y%m%d').dt.month_name().rename('month')

df = df.groupby([m,'name'], sort=False)['record'].mean().reset_index()
print (df)
      month name  record
0   January    A      17
1   January    B      21
2  February    A      16
3  February    B      18

或者如果需要的话,只选择前三个月的字母。

m = pd.to_datetime(df['date'], format='%y%m%d').dt.month_name().str[:3].rename('month')
df = df.groupby([m,'name'], sort=False)['record'].mean().reset_index()
print (df)

  month name  record
0   Jan    A      17
1   Jan    B      21
2   Feb    A      16
3   Feb    B      18

3
投票

你可以将 date 到月份名称和groupby。

(df.groupby([pd.to_datetime(df['date'],format='%y%m%d').dt.strftime('%b'),
            'name'])['record']
  .mean())

输出:

 date  name
Jan   A       17
      B       21
Feb   A       16
      B       18
Name: record, dtype: int64
© www.soinside.com 2019 - 2024. All rights reserved.