猿问

查看 groupby 之后每个 ID 是否存在元素

这是我的数据框:


       ID  Color 

0       1   red    

1       1   blue

2       1   yellow

3       2   blue

4       2   purple

5       3   yellow

6       3   green


我想创建第三列,告诉我每个 ID 是红色还是黄色。如果有红色则第三列将为 1,如果有紫色则第三列将为 0,如果两者都没有则留空。不会有红色和紫色在同一个 ID 中的情况。


所以,我的结果 df 应该是这样的:


       ID  Color    col3

0       1   red     1

1       1   blue    1

2       1   yellow  1

3       2   blue    0

4       2   purple  0

5       3   yellow  

6       3   green

我正在考虑对我的 ID 列进行分组,然后检查颜色列中是否存在红色或紫色。我不确定如何实施。


请帮忙


郎朗坤
浏览 84回答 2
2回答

MMMHUHU

这是使用的一种方法np.select:conds = [df.Color.eq('red'), df.Color.eq('purple')]df['col3'] = np.select(conds, [1,0], '')df['col3'] = df.groupby('ID').col3.transform('max')或者我们可以改为将 a 设置nan为默认值,并使用 进行转换first:df['col3'] = np.select(conds, [1,0], np.nan)df['col3'] = df.groupby('ID').col3.transform('first').fillna('')print(df)   ID   Color col30   1     red    11   1    blue    12   1  yellow    13   2    blue    04   2  purple    05   3  yellow     6   3   green     请注意,前一种方法利用了以下优势:max('', '0')# '0'max('', '1')# '1'

慕姐4208626

numpy如果您出于任何原因不想使用,这里有一个替代方案:df['col3'] = df.set_index('ID')['Color'].apply({'red': 1, 'purple': 0}.get).groupby(level=0).transform('max').fillna('').reset_index(drop=True)   ID   Color col30   1     red    11   1    blue    12   1  yellow    13   2    blue    04   2  purple    05   3  yellow     6   3   green     
随时随地看视频慕课网APP

相关分类

Python
我要回答