我正在寻找等效于SQL窗口聚合函数OVER()的熊猫

clients = np.array(['c1', 'c2'])
df = pd.DataFrame({'client' : clients[np.random.randint(0,2,10)],\
'day_w' : np.random.randint(1,8,25) })

df.groupby(['client','day_w']).size()


我想将以下信息添加到DataFrame中的每一行:
每个客户的不同天数。

在此先感谢您的帮助

最佳答案

我认为您也不需要按周分组,只需调用transform并传递func nunique即可返回不同的天数:

好吧,我想我知道你现在要干什么:

In [98]:

df['days per client'] = df.groupby(['client'])['day_w'].transform(pd.Series.nunique)
df
Out[98]:
   client  day_w  days per client
0      c2      3                6
1      c1      2                7
2      c1      5                7
3      c1      5                7
4      c2      4                6
5      c2      3                6
6      c2      7                6
7      c1      3                7
8      c2      2                6
9      c1      2                7
10     c1      6                7
11     c1      6                7
12     c1      4                7
13     c2      5                6
14     c1      6                7
15     c2      5                6
16     c2      7                6
17     c2      7                6
18     c1      2                7
19     c1      1                7
20     c2      2                6
21     c2      6                6
22     c1      7                7
23     c1      3                7
24     c1      4                7

09-25 18:52