只显示特定组

2024-05-15 16:54:19 发布

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

喂,我需要把注意力集中在一张桌子里的特定群体上

举个例子:

groups col1 
A 3
A 4
A 2
A 1
B 3
B 3
B 4
C 2
D 4
D 3

我只想显示包含3和4但没有其他数字的组。 我应该得到:

groups col1 
B 3
B 3
B 4
D 4
D 3

Tags: 数字例子群体col1groups桌子注意力
3条回答

使用df.loc[]然后按正常逻辑进行搜索应该是可行的

import pandas as pd

data = [['A', 3],
        ['A', 4],
        ['A', 2],
        ['A', 1],
        ['B', 3],
        ['B', 3],
        ['B', 4],
        ['C', 2],
        ['D', 4],
        ['D', 3]]
df = pd.DataFrame(data, columns=["col1", "col2"])

df = df.loc[df["col2"] >= 3]
print(df.head())

这里有两种可能的方法-通过^{}测试值以获得成员资格,然后通过^{}^{}获得所有具有所有True的组,最后通过^{}过滤:

df1 = df[df['col1'].isin([3,4]).groupby(df['groups']).transform('all')]
print (df1)
  groups  col1
4      B     3
5      B     3
6      B     4
8      D     4
9      D     3

另一种方法是首先获取所有组的值,其中NOT包含值3,4,然后传递给另一个带反转掩码的isin函数:

df1 = df[~df['groups'].isin(df.loc[~df['col1'].isin([3,4]), 'groups'])]
print (df1)
  groups  col1
4      B     3
5      B     3
6      B     4
8      D     4
9      D     3

我们也可以使用^{}

new_df=df.groupby('groups').filter(lambda x: x.col1.isin([3,4]).all() )
print(new_df)

  groups  col1
4      B     3
5      B     3
6      B     4
8      D     4
9      D     3

从lambda函数中删除Series.isin的替代方法:

df['aux']=df['col1'].isin([3,4])
df.groupby('groups').filter(lambda x: x.aux.all()).drop('aux',axis=1)

相关问题 更多 >