在分组后的数据框中计数特定值的数量

2024-04-19 01:29:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框如下:

    userID  Correct
0   1050    F
1   1050    T
2   1050    T
3   1050    F
4   1050    F
5   1050    F
6   1050    F
7   1050    F
8   1050    F
9   1050    F
10  1051    F
11  1051    F
12  1051    F
13  1051    F
14  1051    F
15  1051    T
16  1051    F
17  1051    F
18  1051    F
19  1051    T

我要做的是计算每个用户的“正确”列的T数。也就是说,在我们按userID对数据帧进行分组之后,我需要一个列,该列具有该用户的T数。你知道吗

以下是我所做的,但显然是错误的:

df.groupby('userID').agg({'Correct': lambda x: (x == T).count()})

Tags: 数据lambda用户dfcount错误agggroupby
2条回答

你真的很接近了,使用sumTrue

df1 = df.groupby('userID').agg({'Correct': lambda x: (x == 'T').sum()})
print (df1)
        Correct
userID         
1050          2
1051          2

但最好先过滤然后计数:

df1 = df[df['Correct'] == 'T'].groupby('userID').size().to_frame('Correct')
print (df1)
        Correct
userID         
1050          2
1051          2

对于没有TuserID0添加^{}

df1 = (df[df['Correct'] == 'T'].groupby('userID')
                              .size()
                              .reindex(df['userID'].unique(), fill_value=0)
                              .to_frame('Correct'))
print (df1)
        Correct
userID         
1050          2
1051          2
333           0

这将考虑所有“F”并返回0:)

df1.groupby('userID').Correct.apply(lambda x : len(x[x=='T']))

Out[371]: 
userID
1050    2
1051    0

输入数据:

df1
Out[372]: 
    userID Correct
0     1050       F
1     1050       T
2     1050       T
3     1050       F
4     1050       F
5     1050       F
6     1050       F
7     1050       F
8     1050       F
9     1050       F
10    1051       F
11    1051       F
12    1051       F
13    1051       F
14    1051       F
15    1051       F
16    1051       F
17    1051       F
18    1051       F
19    1051       F

相关问题 更多 >