Python 具有两个groupby的数据帧平均值:一个按月份,另一个按参数
包含日期(以yymmdd的形式)、名称和记录的数据框,如下所示:Python 具有两个groupby的数据帧平均值:一个按月份,另一个按参数,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,包含日期(以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 我需要按月份和姓名
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
您能帮忙吗?使用和合计平均值:
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
或者,如有必要,只选择月份的前3个字母:
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
与总平均值一起使用:
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
或者,如有必要,只选择月份的前3个字母:
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
您可以将日期转换为月份名称和分组依据:
(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
您可以将日期转换为月份名称和分组依据:
(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
抱歉,我需要解释更多:日期是以yymmdd的形式。@Brom-编辑,如果下一个月都使用正确的顺序解决方案如果我只使用一月、二月,我可以不使用
列表
猫吗?太棒了!它按月份分类。如果我有从去年5月到今年4月的数据,它将以5月开始,而不是按字母顺序。对不起,我需要解释更多:日期是以yymmdd的形式。@Brom-编辑,解决方案顺序正确如果所有下个月我只使用1月、2月,我可以不使用列表
猫吗?太棒了!它按月份分类。如果我有从去年5月到今年4月的数据,它将以5月开始,而不是按字母顺序。对不起,日期的形式是yymmdd,所以应该只有一月和二月的平均值。或者,日期的形式是yymmdd,所以应该只有一月和二月的平均值