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的数量。
预期输出(EDIT):
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')
但这行不通...
谢谢
3条答案
按热度按时间v8wbuo2f1#
我认为您需要
groupby
和NaN
值的sum
:请注意,
.isnull()
位于原始Dataframe列上,而不是位于groupby()
-对象上。groupby()
没有.isnull()
,但如果它有.isnull()
,则预期会给出与原始DataFrame上的.isnull()
相同的结果。如果需要过滤器,首先添加
boolean indexing
:或者更简单:
编辑:解决方案非常相似,仅添加
transform
:相似溶液:
hzbexzde2#
退货:
aoyhnmkz3#
只需添加此参数dropna=False
df.groupby(['A',' B ',' C '],dropna=假).size()
检查文档:dropnabool,默认为True如果为True,并且组关键字包含NA值,则NA值将与行/列一起删除。如果为False,则NA值也将被视为组中的关键字。