samn列的每个值上的filter dataframe在Pandas\Python中具有另一列的特定值

2024-10-02 00:22:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

有什么见解吗

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

Tags: columns信息dataframecatpdwhite动物dog
3条回答

应用条件df['couleur'] == 'brown]仅获取couleur字段为棕色的记录,然后覆盖原始数据帧(要删除):

df = df[df['couleur'] == 'brown']

或者,如果您只是想要输出:

output = df[df['couleur'] == 'brown']

使用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

您可以基于颜色进行过滤,然后提取保留的动物列表,然后使用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'])]

相关问题 更多 >

    热门问题