pandas:如何通过带有nans的列进行分组时显示nans?

时间:2016-05-14 11:08:39

标签: python pandas group-by

我知道这不再受支持了,但是,特别是来自SQL背景,我发现它令人难以置信,令人难以置信,令人难以置信(我提到了令人难以置信的?)荒谬。我处理的几乎所有数据都碰巧有nans / nulls,对我来说理解这种情况非常重要,以及我的数据中有多少空值。

有没有办法绕过这个?我能想到的唯一解决方案是:

  1. 用其他值替换空值
  2. 将我想要运行的聚合函数的结果保存到单独的数据框
  3. 重置索引(如果索引可以为null,则不清楚)
  4. 将'其他一些价值'改回纳
  5. 然而,这会带来许多问题:不仅麻烦,而且还需要用数据中尚未存在的值替换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
    

0 个答案:

没有答案