如何用group by提取包含数据

问题描述 投票:1回答:1
|id|name|state|
|1|A|yes|
|2|B|yes|
|3|B|no|
|4|C|yes|
|5|C|yes|
|6|D|no|

当我使用df.groupby(['name'])定义上面的Dataframe时。我想在州提取'是'的名称项目。

在这种情况下,A,B,C是要提取的目标数据。

我该如何提取数据?

pandas
1个回答
2
投票

您可以使用boolean indexing通过Series.unique提取值,并通过Series.isin再次过滤:

a = df.loc[df['state'] == 'yes', 'name'].unique()
print (a)
['A' 'B' 'C']

df1 = df[df['name'].isin(a)]
print (df1)
   id name state
0   1    A   yes
1   2    B   yes
2   3    B    no
3   4    C   yes
4   5    C   yes

另一个解决方案是使用GroupBy.transformGroupBy.any测试每组至少一个True

df1 = df[(df['state'] == 'yes').groupby(df['name']).transform('any')]
print (df1)
   id name state
0   1    A   yes
1   2    B   yes
2   3    B    no
3   4    C   yes
4   5    C   yes
© www.soinside.com 2019 - 2024. All rights reserved.