根据大熊猫的具体情况按数量和比例分组



我有一个数据帧,如下所示:

Bookin_ID   Session     Walkin
1             S1          no
2             S1          no
3             S1          no
4             S1          yes
5             S1          no
6             S1          yes
10            S2          no
11            S2          yes
12            S2          no
13            S2          yes
14            S2          no
15            S2          yes
16            S2          no
17            S2          no
18            S2          yes
19            S2          no
26            S3          no
27            S3          no
28            S3          yes
29            S3          no

根据以上内容,我想计算每个会话的步行概率,如下所示:

walkin_prob =  count of walkin = 'yes' in that session / total number of booking in that session

例如,对于Session=S1,Walkin=no的计数为2,预订的总数为6,因此Walkin_prob=2/6=0.33。

类似地,对于S2,Walkin=yes的计数为4,预订的总数为10,因此Walkin_prob=4/10=0.4。等等

预期输出:

Bookin_ID     Session      Walkin     walkin_prob
1             S1          no       0.33
2             S1          no       0.33
3             S1          no       0.33
4             S1          yes      0.33
5             S1          no       0.33
6             S1          yes      0.33
10            S2          no       0.33
11            S2          yes      0.4
12            S2          no       0.4
13            S2          yes      0.4
14            S2          no       0.4
15            S2          yes      0.4
16            S2          no       0.4
17            S2          no       0.4
18            S2          yes      0.4
19            S2          no       0.4
26            S3          no       0.25
27            S3          no       0.25
28            S3          yes      0.25
29            S3          no       0.25

我在下面试过了,但没有用。

df['walkin_prob'] = df.groupby('Session')[['Walkin'] == 'yes'].sum()/df.groupby('Session')['Walkin'].sum()

下面显示错误

未找到列:错误

您可以使用transform来执行此操作:

df['walkin_prob'] = df.groupby('Session')['Walkin'].transform(lambda x: x[x == 'yes'].count() / x.count())

当从transform中的函数返回单个值时,它将为组中的每一行使用该值。以上内容将给出准确的预期输出。

你差不多到了。只是[['Walkin'] == 'yes']不是正确的记数法。它的计算结果为False(不是列(。

您可以使用.locdf['Walkin'] == 'yes':上进行过滤

df.loc[df['Walkin'] == 'yes'].groupby('Session').sum() / df.groupby('Session').sum()
walkin_prob
Session             
S1          0.333333
S2          0.407125
S3          0.250000

最新更新