我有一个具有以下结构的数据框
Goals Team Day
1 Madrid monday
3 Madrid friday
3 Man U monday
2 Man u sunday
etc etc etc
所以我有一个包含数百个团队,一周中的几天和目标的数据的数据框。
我想做的是创建一个数据框,其中包含团队和日期之间每种可能组合的平均值,例如:
Team Day Average
Madrid monday 5.6
Madrid tuesday 6.7
Madrid tuesday 4.3
Madrid wednesday 3.5
Madrid thursday 4.3
Madrid friday 3.9
Madrid saturday 9.8
Madrid sunday 3.4
Man U monday 4.5
Man U tuesday 4.2
... ... ...
etc etc etc
如何使用pandas和numpy做到这一点?
我想我必须使用循环,但是我不知道该怎么做。
答案 0 :(得分:2)
np.random.seed([3, 1415])
teams = ['Madrid', 'Man U']
days = 'mon tue wed thu fri sat sun'.split()
df = pd.DataFrame(dict(
Team=np.random.choice(teams, 15),
Day=np.random.choice(days, 15),
Goals=np.random.randint(10, size=15)
))
groupby
df.groupby(
['Team', 'Day'],
as_index=False
).mean().rename(columns=dict(Goals='Average'))
Team Day Average
0 Madrid fri 8.00
1 Madrid mon 3.75
2 Man U mon 7.00
3 Man U sat 5.00
4 Man U sun 5.00
5 Man U thu 7.00
6 Man U tue 8.00
7 Man U wed 4.00
groupby
能自我解释as_index=False
告诉groupby
不要将分组的列放入结果的索引中。它使我不必去reset_index
mean()
取平均值rename(columns=dict(Goals='Average'))
只是为了获得所需的列名而做的整理工作。我将字典传递给columns
方法的rename
参数。Pandas如何知道要计算平均值的哪一列?例如,如果我有两列带有数值的列,而我只想取其中一列的平均值,就会发生这种情况。我该如何告诉熊猫?
通过选择groupby
df.groupby(
['Team', 'Day'],
as_index=False
).Goals.mean().rename(columns=dict(Goals='Average'))
否则,Pandas将尝试对所有未分组的列求平均值。