Python 按分组后,计算数据帧中特定值的数量
我有一个数据框,如下所示:Python 按分组后,计算数据帧中特定值的数量,python,pandas,group-by,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 10
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()})
您非常接近,请使用
True
s的sum
:
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
对于添加0
对于没有T的userID
添加:
这将考虑所有的“F”和返回0:)/P>
输入数据:
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
使用sum会得到奇怪的结果。例如,用户1050有两个T,但sum只返回1。另外,预先过滤T不起作用,因为我还需要零作为计数。我不希望每个用户的t计数都丢失零。我为它添加了reindex
——它为所有userID
添加了0
,没有t
。
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