在分组后计算数据帧中某些值的数量

时间:2017-09-20 15:43:15

标签: python pandas group-by

我的数据框如下:

    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'每个用户的列。也就是说,在我们按用户ID对数据框进行分组后,我想要一个具有该用户T的数量的列。

这是我所做的,但显然是错的:

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

2 个答案:

答案 0 :(得分:3)

你真的很接近,使用sum的{​​{1}}:

True

但更好的是先过滤然后计算:

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 添加0userID添加reindex

T

答案 1 :(得分:2)

这将考虑所有' 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