python-熊猫在groupby函数中计数空值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-熊猫在groupby函数中计数空值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2030字,纯文字阅读大概需要3分钟。
内容图文
![python-熊猫在groupby函数中计数空值](/upload/InfoBanner/zyjiaocheng/694/2c43696f31634599886712277efb74ca.jpg)
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B' : ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C' : [np.nan, 'bla2', np.nan, 'bla3', np.nan, np.nan, np.nan, np.nan]})
输出:
A B C
0 foo one NaN
1 bar one bla2
2 foo two NaN
3 bar three bla3
4 foo two NaN
5 bar two NaN
6 foo one NaN
7 foo three NaN
我想使用groupby来计算foo的不同组合的NaN数.
预期输出(编辑):
A B C D
0 foo one NaN 2
1 bar one bla2 0
2 foo two NaN 2
3 bar three bla3 0
4 foo two NaN 2
5 bar two NaN 1
6 foo one NaN 2
7 foo three NaN 1
目前,我正在尝试:
df['count']=df.groupby(['A'])['B'].isnull().transform('sum')
但这不起作用…
谢谢
解决方法:
我认为您需要groupby和NaN值之和:
df2 = df.C.isnull().groupby([df['A'],df['B']]).sum().astype(int).reset_index(name='count')
print (df2)
A B count
0 bar one 0
1 bar three 0
2 bar two 1
3 foo one 2
4 foo three 1
5 foo two 2
如果需要过滤器,首先添加boolean indexing:
df = df[df['A'] == 'foo']
df2 = df.C.isnull().groupby([df['A'],df['B']]).sum().astype(int)
print (df2)
A B
foo one 2
three 1
two 2
或更简单:
df = df[df['A'] == 'foo']
df2 = df['B'].value_counts()
print (df2)
one 2
two 2
three 1
Name: B, dtype: int64
编辑:解决方案非常相似,仅添加transform:
df['D'] = df.C.isnull().groupby([df['A'],df['B']]).transform('sum').astype(int)
print (df)
A B C D
0 foo one NaN 2
1 bar one bla2 0
2 foo two NaN 2
3 bar three bla3 0
4 foo two NaN 2
5 bar two NaN 1
6 foo one NaN 2
7 foo three NaN 1
类似的解决方案:
df['D'] = df.C.isnull()
df['D'] = df.groupby(['A','B'])['D'].transform('sum').astype(int)
print (df)
A B C D
0 foo one NaN 2
1 bar one bla2 0
2 foo two NaN 2
3 bar three bla3 0
4 foo two NaN 2
5 bar two NaN 1
6 foo one NaN 2
7 foo three NaN 1
内容总结
以上是互联网集市为您收集整理的python-熊猫在groupby函数中计数空值全部内容,希望文章能够帮你解决python-熊猫在groupby函数中计数空值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。