在samn列的每个值上过滤数据帧都具有Panda \ Python中另一列的特定值

时间:2017-10-20 15:22:07

标签: python pandas dataframe

我想找到棕色的动物(列'颜色'),并且对于那些动物保留关于它的所有信息(所有行),对于没有棕色的动物,删除关于它的所有信息(所有行)。

有什么见解?

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'])

3 个答案:

答案 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'])]