我应该计算哪个国家自2010年以来在锦标赛中进球最多。到目前为止,我已经设法通过过滤掉这样的友好内容来操纵数据框:
no_friendlies = df[df.tournament != "Friendly"]
然后我将日期列设置为索引,以过滤掉2010年之前的所有匹配项:
no_friendlies_indexed = no_friendlies.set_index('date')
since_2010 = no_friendlies_indexed.loc['2010-01-01':]
从现在开始,我很失落,因为我不知道如何将每个国家的本国和国外进球数相加
感谢任何帮助/建议!
编辑:
示例数据的文本版本:
date home_team away_team home_score away_score tournament city country neutral
0 1872-11-30 Scotland England 0 0 Friendly Glasgow Scotland False
1 1873-03-08 England Scotland 4 2 Friendly London England False
2 1874-03-07 Scotland England 2 1 Friendly Glasgow Scotland False
3 1875-03-06 England Scotland 2 2 Friendly London England False
4 1876-03-04 Scotland England 3 0 Friendly Glasgow Scotland False
5 1876-03-25 Scotland Wales 4 0 Friendly Glasgow Scotland False
6 1877-03-03 England Scotland 1 3 Friendly London England False
7 1877-03-05 Wales Scotland 0 2 Friendly Wrexham Wales False
8 1878-03-02 Scotland England 7 2 Friendly Glasgow Scotland False
9 1878-03-23 Scotland Wales 9 0 Friendly Glasgow Scotland False
10 1879-01-18 England Wales 2 1 Friendly London England False
编辑2:
我刚刚尝试这样做:
since_2010.groupby(['home_team', 'home_score']).sum()
但是它不会返回主队得分的主场进球总数(如果可行,我会为客队重复总进球数)
答案 0 :(得分:2)
.groupby
和.sum()
用于主队,然后对客队进行相同操作,并将两者加在一起:
df_new = df.groupby('home_team')['home_score'].sum() + df.groupby('away_team')['away_score'].sum()
输出:
England 12
Scotland 34
Wales 1
更详细的解释(每条评论):
.groupby
一列home_team
。在您的答案中,您是按['home_team', 'home_score']
分组的(您的目标(没有双关语)是为了获得.sum()
中的home_score
,所以您应该不 { {1}}。如您所见,.groupby()
位于我使用['home_score']
的部分之后,因此我可以得到其中的.groupby
。这样可以为主队做好准备。.sum()
执行相同的操作。away_team
和home_team
组的结果对于国家/地区具有相同的值,因此您可以将它们加在一起... 答案 1 :(得分:1)
使用this guide重塑形状。好处是它会自动创建一个'home_or_away'
指示器,但是我们将首先更改这些列,使它们成为“ score_home”(而不是“ home_score”)。
# Swap column stubs around `'_'`
df.columns = ['_'.join(x[::-1]) for x in df.columns.str.split('_')]
# Your code to filter, would drop everything in your provided example
# df['date'] = pd.to_datetime(df['date'])
# df[df['date'].dt.year.gt(2010) & df['tournament'].ne('Friendly')]
df = pd.wide_to_long(df, i='date', j='home_or_away',
stubnames=['team', 'score'], sep='_', suffix='.*')
# country neutral tournament city team score
#date home_or_away
#1872-11-30 home Scotland False Friendly Glasgow Scotland 0
#1873-03-08 home England False Friendly London England 4
#1874-03-07 home Scotland False Friendly Glasgow Scotland 2
#...
#1878-03-02 away Scotland False Friendly Glasgow England 2
#1878-03-23 away Scotland False Friendly Glasgow Wales 0
#1879-01-18 away England False Friendly London Wales 1
所以现在无论在家还是在外,您都可以得到分数:
df.groupby('team')['score'].sum()
#team
#England 12
#Scotland 34
#Wales 1
#Name: score, dtype: int64