鉴于此数据集,我想计算缺少的NaN值:
df = pd.DataFrame({'A' : [1, np.nan, 2 , 55, 6, np.nan, -17, np.nan],
'Team' : ['one', 'one', 'two', 'three','two', 'two', 'one', 'three'],
'C' : [4, 14, 3 , 8, 8, 7, np.nan, 11],
'D' : [np.nan, np.nan, -12 , 12, 12, -12, np.nan, np.nan]})
Run Code Online (Sandbox Code Playgroud)
具体来说,我想在"团队"列中计算每组的百分比(以百分比表示).我可以通过这个获得原始计数:
df.groupby('Team').count()
Run Code Online (Sandbox Code Playgroud)
这将获得非缺失数字的数量.我想要做的是创建一个百分比,因此我不会得到原始数字,而是将其作为每个组中总条目的百分比(我不知道这些组的大小都是不均匀的).我尝试过使用.agg(),但我似乎无法得到我想要的东西.我怎样才能做到这一点?
And*_*den 10
In [11]: df.notnull()
Out[11]:
A C D Team
0 True True False True
1 False True False True
2 True True True True
3 True True True True
4 True True True True
5 False True True True
6 True False False True
7 False True False True
In [12]: df.notnull().mean()
Out[12]:
A 0.625
C 0.875
D 0.500
Team 1.000
dtype: float64
Run Code Online (Sandbox Code Playgroud)
和groupby:
In [13]: df.groupby("Team").apply(lambda x: x.notnull().mean())
Out[13]:
A C D Team
Team
one 0.666667 0.666667 0.0 1.0
three 0.500000 1.000000 0.5 1.0
two 0.666667 1.000000 1.0 1.0
Run Code Online (Sandbox Code Playgroud)
如果没有set_index先申请,可能会更快做到这一点:
In [14]: df.set_index("Team").notnull().groupby(level=0).mean()
Out[14]:
A C D
Team
one 0.666667 0.666667 0.0
three 0.500000 1.000000 0.5
two 0.666667 1.000000 1.0
Run Code Online (Sandbox Code Playgroud)