一个包含日期(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
请你能帮帮我吗?
使用 to_datetime
与 Series.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
你可以将 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