新建一个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
暂时没有想到其他方法,如果您有更好的方法,欢迎告诉我,共同学习!
网友评论