我知道这不再受支持了,但是,特别是来自SQL背景,我发现它令人难以置信,令人难以置信,令人难以置信(我提到了令人难以置信的?)荒谬。我处理的几乎所有数据都碰巧有nans / nulls,对我来说理解这种情况非常重要,以及我的数据中有多少空值。
有没有办法绕过这个?我能想到的唯一解决方案是:
然而,这会带来许多问题:不仅麻烦,而且还需要用数据中尚未存在的值替换nans。有没有人有更好的方法来做到这一点?
是的,我知道问了同样的问题(groupby columns with NaN (missing) values),但几年前,所以我想知道是否有新的解决方案同时出现。
此外,文档提到这种行为与R一致,但这并不完全正确,因为R有一个选项不要省略nans,而pandas则没有。
我已经汇总了一个我的意思的简单例子:
import pandas as pd
import numpy as np
df=pd.DataFrame()
df['id']= np.repeat( [1,2],3 )
df['x']=1
df.ix[0,'id'] = np.nan
print df
gr = df.groupby('id')
print gr.count()
df['id'].fillna(999, inplace=True)
newgr = df.groupby('id')
#changing groups doesn't seem to have any effect:
newgr.groups[np.nan] = newgr.groups.pop(999)
print 'After the change:'
print newgr.groups
print newgr.count()
print 'id still shows up as 999'
print 'Instead, I can change the final output:'
mycount = newgr.count().reset_index()
mycount.ix[mycount['id'] == 999, 'id' ] = np.nan
print mycount