我试图创造一个领域来统计过去10天中一支球队所玩的比赛数量。
我的数据集如下:
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天玩的游戏数量。
每一场比赛都应该总结过去几场比赛,无论是球队主场还是客场。
这里的预期结果是:
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现在我的代码是:
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()但这不管用。
谢谢你的帮助。
致以敬意,
发布于 2020-03-03 15:21:16
我相信你指的是11天而不是10天。
确保您的'date'列是日期
df['date'] = pd.to_datetime(df['date']) stack、get_dummies和lookup
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成为我的查找表
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发布于 2020-03-03 15:07:00
这可能不是最有效的解决方案,但非常简单:
# 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')输出:
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.0https://stackoverflow.com/questions/60509974
复制相似问题