我想找到棕色的动物(列'颜色'),并且对于那些动物保留关于它的所有信息(所有行),对于没有棕色的动物,删除关于它的所有信息(所有行)。
有什么见解?
df = pd.DataFrame([['dog','France','white'],['dog','Japon','brown'],['cat','France','white'],['cat','France','dark']],columns=['Animal','localisation','couleur'])
output = pd.DataFrame([['dog','France','white'],['dog','Japon','brown']],columns=['Animal','localisation','couleur'])
答案 0 :(得分:0)
使用filter
In [4934]: df.groupby('Animal').filter(lambda x: 'brown' in x['couleur'].values)
Out[4934]:
Animal localisation couleur
0 dog France white
1 dog Japon brown
或者
In [4935]: df.groupby('Animal').filter(lambda x: x['couleur'].eq('brown').any())
Out[4935]:
Animal localisation couleur
0 dog France white
1 dog Japon brown
答案 1 :(得分:0)
应用条件df['couleur'] == 'brown]
以仅获取couleur字段为棕色的记录,然后覆盖原始数据框(以删除):
df = df[df['couleur'] == 'brown']
或者如果您只想要输出:
output = df[df['couleur'] == 'brown']
答案 2 :(得分:0)
您可以根据颜色进行过滤,然后提取剩余的动物列表,然后使用pd.Series.isin方法过滤该列表中动物的原始数据帧:
animals = df[df['couleur'] == 'brown']['Animal']
output = df[df['Animal'].isin(animals)]
或一行:
output = df[df['Animal'].isin(df[df['couleur'] == 'brown']['Animal'])]