首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一支球队持续10天的比赛数

一支球队持续10天的比赛数
EN

Stack Overflow用户
提问于 2020-03-03 14:57:20
回答 2查看 139关注 0票数 1

我试图创造一个领域来统计过去10天中一支球队所玩的比赛数量。

我的数据集如下:

代码语言:javascript
复制
date              Home     Visitors    Result
2020-01-01        Paris     Lisbon       1
2020-01-03        Madrid    London       1
2020-01-13        Lisbon    Madrid       1
2020-01-14        London    Paris        1

我想要创建df['home_last_games'],其中包含了主队过去10天的比赛数量。df['visitor_last_games']也是如此,它包含了访问者团队过去10天玩的游戏数量。

每一场比赛都应该总结过去几场比赛,无论是球队主场还是客场。

这里的预期结果是:

代码语言:javascript
复制
date              Home    Visitors    Result    Home_last_games    Visitors_last_games
2020-01-01        Paris     Lisbon       1             1                       1
2020-01-03        Madrid    London       1             1                       1
2020-01-13        Lisbon    Madrid       1             1                       2
2020-01-14        London    Paris        1             1                       1

现在我的代码是:

代码语言:javascript
复制
teams = df['home'].unique()

for team in teams:
    day = df['date'] - timedelta(days=10)
    df['home_last_games'] = df.loc[(df['home'] == team) & (df['date'] >= day), 'home'].count()
    df['visitor_last_games'] = df.loc[(df['visitor'] == team) & (df['date'] >= day), 'visitor'].count()

但这不管用。

谢谢你的帮助。

致以敬意,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-03 15:21:16

我相信你指的是11天而不是10天。

确保您的'date'列是日期

代码语言:javascript
复制
df['date'] = pd.to_datetime(df['date'])    

stackget_dummieslookup

代码语言:javascript
复制
d = df.set_index('date')[['Home', 'Visitors']].stack().reset_index(1, drop=True)
d = pd.get_dummies(d).sum(level=0).rolling('11D').sum()

df.assign(
    HLG=d.lookup(df.date, df.Home),
    VLG=d.lookup(df.date, df.Visitors)
)

        date    Home Visitors  Result  HLG  VLG
0 2020-01-01   Paris   Lisbon       1  1.0  1.0
1 2020-01-03  Madrid   London       1  1.0  1.0
2 2020-01-13  Lisbon   Madrid       1  1.0  2.0
3 2020-01-14  London    Paris       1  1.0  1.0

一些细节

d成为我的查找表

代码语言:javascript
复制
d

            Lisbon  London  Madrid  Paris
date                                     
2020-01-01     1.0     0.0     0.0    1.0
2020-01-03     1.0     1.0     1.0    1.0
2020-01-13     1.0     1.0     2.0    0.0
2020-01-14     1.0     1.0     1.0    1.0
票数 1
EN

Stack Overflow用户

发布于 2020-03-03 15:07:00

这可能不是最有效的解决方案,但非常简单:

代码语言:javascript
复制
# make sure your date column is datetime and set it as index:
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)


def get_stats(df, col, window='10D'):
    tmp_df = pd.get_dummies(df[col]).rolling(window).sum()
    return tmp_df.lookup(df.index, df[col])

# apply the function:
df['Home_last_games'] = get_stats(df, 'Home')
df['Visit_last_games'] = get_stats(df, 'Visitors')

输出:

代码语言:javascript
复制
              Home Visitors  Result  Home_last_games  Visit_last_games
date                                                                  
2020-01-01   Paris   Lisbon       1              1.0               1.0
2020-01-03  Madrid   London       1              1.0               1.0
2020-01-13  Lisbon   Madrid       1              1.0               1.0
2020-01-14  London    Paris       1              1.0               1.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60509974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档