【发布时间】:2020-04-01 23:42:17
【问题描述】:
最近我开始学习 Pandas。我真的试图找到解决方案,但找不到。这就是问题所在。
我有一个数据框:简单的足球数据。 对于每支球队,我想知道他们在前 2 场比赛中进了多少球;不管他们是主队还是客队。所以我必须为每个团队从 2 个不同的列中汇总特定数量的值。
样本数据:
import pandas as pd
data = [['2018-02-03', 'manutd', 'chelsea', 3, 1], ['2018-02-08', 'arsenal', 'liverpool', 1, 1],
['2018-01-12', 'chelsea', 'westham', 2, 0], ['2018-01-12', 'liverpool', 'manutd', 0, 2],
['2018-03-15', 'arsenal', 'chelsea', 2, 2], ['2018-02-20', 'manutd', 'brighton', 0, 0],
['2018-04-01', 'westham', 'fulham', 1, 0], ['2018-03-15', 'manutd', 'westham', 2, 1]]
df = pd.DataFrame(data, columns = ['event_time', 'home_team', 'away_team', 'home_goals', 'away_goals'])
df['event_time'] = pd.to_datetime(df['event_time'])
df.sort_values(['event_time'],inplace=True, ascending=False)
print(df)
event_date home_team away_team home_goals away_goals
6 2018-04-01 westham fulham 1 0
4 2018-03-15 arsenal chelsea 2 2
7 2018-03-15 manutd westham 2 1
5 2018-02-20 manutd brighton 0 0
1 2018-02-08 arsenal liverpool 1 1
0 2018-02-03 manutd chelsea 3 1
2 2018-01-12 chelsea westham 2 0
3 2018-01-12 liverpool manutd 0 2
我想要达到的目标:
event_time home_team away_team home_goals away_goals h_goals_previous_2 a_goals_previous_2
6 2018-04-01 westham fulham 1 0 1 NaN
4 2018-03-15 arsenal chelsea 2 2 1 3
7 2018-03-15 manutd westham 2 1 3 0
5 2018-02-20 manutd brighton 0 0 5 NaN
1 2018-02-08 arsenal liverpool 1 1 NaN 0
0 2018-02-03 manutd chelsea 3 1 2 2
2 2018-01-12 chelsea westham 2 0 NaN NaN
3 2018-01-12 liverpool manutd 0 2 NaN NaN
说明: - 2018-03-15 阿森纳与切尔西一起比赛。在之前的2场比赛中,切尔西一共打进3球:客队打进1球,主队打进2球。 - 之前的一些进球是南,因为我们没有之前比赛的数据。
我试图通过逐个团队迭代来做到这一点,并且我为每个团队构建了一个排序的 df 子集,然后可以聚合这些值,但觉得这不是最好的解决方案,可以使用漂亮的 Pandas 表达式来完成:
teams = pd.unique(df[['home_team', 'away_team']].values.ravel('K'))
for team in teams:
print(team)
team_df = df[(df['home_team']==team) | (df['away_team']==team)]
team_df.sort_values(['event_date'],inplace=True, ascending=False)
print(team_df)
如何在不编写循环和 if 的情况下做到这一点?
【问题讨论】:
-
你能解释一下“不管他们是主队还是客队”是什么意思吗?如果这是真的,那么为什么你有两个
goals_previous_2列。一个在家,一个在外。此外,如果您想要更快的反馈,我建议您完成这两列并提供所需的输出。 -
输出已更新。有 2 个
goals_previous_2,因为我想计算主队和客队以及他们在前 2 场比赛中的进球数。计算说明: - 2018-03-15 阿森纳与切尔西交手。在之前的2场比赛中,切尔西一共打进3球:客队打进1球,主队打进2球。 - 之前的一些进球是南,因为我们没有之前比赛的数据。
标签: pandas numpy data-science