gpt4 book ai didi

python - 每组最后 n 天的计数

转载 作者:行者123 更新时间:2023-11-28 22:39:17 26 4
gpt4 key购买 nike

我有一个这样的DataFrame

df = pd.DataFrame({'Team':['CHI','IND','CHI','CHI','IND','CHI','CHI','IND'],
'Date':[datetime.date(2015,10,27),datetime.date(2015,10,28),datetime.date(2015,10,29),datetime.date(2015,10,30),datetime.date(2015,11,1),datetime.date(2015,11,2),datetime.date(2015,11,4),datetime.date(2015,11,4)]})

我可以使用它找到比赛之间的休息天数。

df['TeamRest'] = df.groupby('Team')['Date'].diff() - datetime.timedelta(1)

我还想在 DataFrame 中添加一行,以跟踪每支球队在过去 5 天内打了多少场比赛。

最佳答案

Date 转换为 datetime 因此它可以用作 DateTimeIndex,这对 rolling_count 很重要> 每日频率

df.Date = pd.to_datetime(df.Date)

1) 计算每队比赛之间的天数差异:

df['days_between'] = df.groupby('Team')['Date'].diff() - timedelta(days=1)

2) 计算每个团队最近 5 天的游戏滚动数:

df['game_count'] = 1
rolling_games_count = df.set_index('Date').groupby('Team').apply(lambda x: pd.rolling_count(x, window=5, freq='D')).reset_index()
df = df.drop('game_count', axis=1).merge(rolling_games_count, on=['Team', 'Date'], how='left')

得到:

        Date Team  days_between  game_count
0 2015-10-27 CHI NaT 1
1 2015-10-28 IND NaT 1
2 2015-10-29 CHI 1 days 2
3 2015-10-30 CHI 0 days 3
4 2015-11-01 IND 3 days 2
5 2015-11-02 CHI 2 days 3
6 2015-11-04 CHI 1 days 2
7 2015-11-04 IND 2 days 2

如果你想

df = pd.DataFrame({'Team':['CHI','IND','CHI','CHI','IND','CHI','CHI','IND'], 'Date': [date(2015,10,27),date(2015,10,28),date(2015,10,29),date(2015,10,30),date(2015,11,1),date(2015,11,2),date(2015,11,4),date(2015,12,10)]})
df['game'] = 1 # initialize a game to count.
df['nb_games'] = df.groupby('Team')['game'].apply(pd.rolling_count, 5)

你得到了令人惊讶的结果(一个Date改为一个月后)

         Date Team  game  nb_games
0 2015-10-27 CHI 1 1
2 2015-10-29 CHI 1 2
3 2015-10-30 CHI 1 3
5 2015-11-02 CHI 1 4
6 2015-11-04 CHI 1 5
1 2015-10-28 IND 1 1
4 2015-11-01 IND 1 2
7 2015-12-10 IND 1 3

nb_games=3 在 12 月的晚些时候,当时过去五天没有比赛。除非您转换为 datetime,否则您只会计算 DataFrame 中的最后五个条目,因此对于打了五场以上比赛的球队,您总是会得到五个。

关于python - 每组最后 n 天的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34928028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com