美文网首页
2019-03-24 从多重索引df中删除具有指定多重索引的df

2019-03-24 从多重索引df中删除具有指定多重索引的df

作者: 老_Z | 来源:发表于2019-03-24 14:51 被阅读0次

    新建一个Dataframe
    要求
    计算df中所有具有相同class,id的条目的个数(mode加和),然而value中必须不能同时为0,必须存在至少一个1

    import pandas as pd
    
    df = pd.DataFrame({'class':['A','A','A','B','B','B','C','C','C'],
                      'id':['a','b','a','a','a','b','a','b','a'],
                      'mode':['1','1','1','1','1','1','1','1','1'],
                      'value':[1,0,1,1,0,1,0,1,0]})
    
    df1 = df.groupby(by = ['class','id']).count()
    df2 = df.groupby(by = ['class','id']).sum()
    
    image.png
    image.png image.png

    对df进行groupby操作后,形成了多重索引的列表,头疼了点。
    可以看出df2种value为0的部分就是我们要删除的部分。
    那么,如何删除掉具有multi-index中的这两个条目,着实费了很多功夫。最后找到方法如下:
    所谓删除,就是在一个列表中排除。然而只找到了isin的方法,,没有isnotin,那么实际上我反选也是ok的

    利用multi-index解法:

    
    #df2中获得排除value=0的剩余multi-index,转为列表
    selector = list(df2[df2['value']!=0].index) 
    #在df1种用df.index.isin获得selector中相同multi-index的条目,剩余的就是我们要的东西
    df1 = df1[df1.index.isin(selector)]
    
    image.png

    暂时没有想到其他方法,如果您有更好的方法,欢迎告诉我,共同学习!

    相关文章

      网友评论

          本文标题:2019-03-24 从多重索引df中删除具有指定多重索引的df

          本文链接:https://www.haomeiwen.com/subject/jaluvqtx.html