我有一个 pandas 数据框,如下所示
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
fd = pd.read_clipboard(sep=',')
正如您在输入数据框中看到的,某些 ID 具有与其关联的多种颜色。
因此,每当有多种颜色与之关联时,我想根据以下标准仅选择一种颜色
['Green','Red','Yellow'] = Choose 'Green'
['Red', 'Yellow'] = Choose 'Yellow'
['Green', 'Yellow'] = Choose 'Green'
基本上,绿色是第一优先。第二优先选择黄色,最后优先选择红色。
因此,如果 ID 每当有绿色,请选择绿色(不关心其他颜色)。
如果ID有黄色和红色,则选择黄色
如果其所有行的 ID 仅具有 NA
,请将其保留为 NA
我尝试了以下方法,但这只能让我获得颜色列表
fd.groupby('ID',as_index=False)['color'].aggregate(lambda x: list(x))
fd[final_color] = [if i[0] =='Green' for i in fd[col]]
我希望我的输出如下所示
更新
最佳答案
借助首选项字典对数据帧的颜色值进行排序,然后删除 ID
上的重复项
d = {'Green': 1, 'Yellow': 2, 'Red': 3}
df.sort_values('color', key=lambda c: c.map(d)).drop_duplicates('ID')
另一种方法是首先将 color
列转换为有序分类类型,然后进行分组和聚合以选择最小值
df['color'] = pd.Categorical(df['color'], ['Green', 'Yellow', 'Red'], True)
df.groupby('ID', as_index=False)['color'].agg('min')
ID color
0 1 Green
1 2 Red
2 3 Green
3 4 Yellow
4 5 Green
5 6 Red
6 7 Red
关于python - 如何使用 pandas 标准提取组列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71544600/