我有一个如下所示的数据框
ID,color
1, Yellow
1, Red
1, Green
2, Red
2, np.nan
3, Green
3, Red
3, Green
4, Yellow
4, Red
5, Green
5, np.nan
6, Red
7, Red
8, Green
8, Yellow
fd = pd.read_clipboard(sep=',')
fd = fd.groupby('ID',as_index=False)['color'].aggregate(lambda x: list(x))
正如您在输入数据框中看到的那样,某些 ID 具有与其关联的多种颜色。
现在,我想创建一个数据框的子集,其 ID 具有Yellow
和Green
因此,我尝试了以下方法并获得了每个 ID 的颜色列表
fd.groupby('ID',as_index=False)['color'].aggregate(lambda x: list(x))
我想检查groupby 列表中的和之类的值,然后对数据框进行子集Yellow
化Green
我希望我的输出如下所示(只有两个 ID 同时具有黄色和绿色)
ID
1
1
8
8
更新
输入数据框如下所示
过滤颜色为黄色或绿色的行,然后将数据框分组ID
并转换颜色nunique
以检查ID
具有 2 个唯一颜色。
s = df[df['color'].isin(['Yellow', 'Green'])]
s.loc[s.groupby('ID')['color'].transform('nunique').eq(2), 'ID']
结果
0 1
2 1
14 8
15 8
Name: ID, dtype: int64
根据新要求更新,这里我假设df1
是在以下之后获得的输入数据帧groupby
:
s = pd.DataFrame([*df1['color']])
df1[s.mask(~s.isin(['Yellow', 'Green'])).nunique(1).eq(2)]
结果:
ID color
0 1 [Yellow, Red, Green]
7 8 [Green, Yellow]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句