我使用的是Python,我的数据包含团队名称和已经玩过的游戏日期,看起来像这样(除了几百行):
team date
0 TOR 2016/10/15
1 LAK 2016/10/20
2 CGY 2016/11/03
3 BUF 2016/10/30
4 PIT 2016/10/27
5 CHI 2016/11/05
6 VAN 2016/10/20
7 BUF 2016/10/16
8 STL 2016/10/13
9 BUF 2016/10/29
10 MIN 2016/10/29
11 PIT 2016/11/05
12 CHI 2016/10/18
13 BOS 2016/10/29
14 PIT 2016/10/20
15 COL 2016/10/20
16 MTL 2016/10/20
17 MTL 2016/11/05
18 BOS 2016/11/03
19 EDM 2016/11/05
20 NSH 2016/11/01
我想添加指标列,以显示每个团队最近的10个游戏,以及每个团队最近的5个游戏。如果他们在这个组中,则为1,如果不在,则为0。
我很难过。任何想法将不胜感激!
答案 0 :(得分:1)
我认为您可以使用SeriesGroupBy.nsmallest
和numpy.where
来isin
选择索引:
df.date = pd.to_datetime(df.date)
#in real data use nsmallest(10)
idx = df.groupby('team')['date'].nsmallest(2).index.get_level_values(1)
df['indicator'] = np.where(df.index.isin(idx), 1, 0)
print (df)
team date indicator
0 TOR 2016-10-15 1
1 LAK 2016-10-20 1
2 CGY 2016-11-03 1
3 BUF 2016-10-30 0
4 PIT 2016-10-27 1
5 CHI 2016-11-05 1
6 VAN 2016-10-20 1
7 BUF 2016-10-16 1
8 STL 2016-10-13 1
9 BUF 2016-10-29 1
10 MIN 2016-10-29 1
11 PIT 2016-11-05 0
12 CHI 2016-10-18 1
13 BOS 2016-10-29 1
14 PIT 2016-10-20 1
15 COL 2016-10-20 1
16 MTL 2016-10-20 1
17 MTL 2016-11-05 1
18 BOS 2016-11-03 1
19 EDM 2016-11-05 1
20 NSH 2016-11-01 1