我有一个数据框如下:
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
的 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
要为没有T
的userID
添加0
添加reindex
:
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
关于python - 分组后计算数据框中某些值的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46326434/