|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是要提取的目标数据。
我该如何提取数据?
您可以使用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.transform
和GroupBy.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