首页 > 解决方案 > 熊猫数据框中分组的优先级

问题描述

我需要从 Col_2 中选择字母到 new_col。当有 2 个值时,我想根据 Col_2 中的值给予优先级:A、B。在 col_1 确定的 2 个值的情况下,我需要给予 A 比 B 更高的选择优先级。


Col_1      Col_2        new_col
1            A             A
1            B             A
2            B             B 
3            A             A 
4            B             A
4            A             A

标签: pandas

解决方案


通过在列参数中排序来使用具有设置优先级的有序分类,categories然后GroupBy.transform用于返回具有与原始max值相同大小的系列:

df['Col_2'] = pd.Categorical(df['Col_2'], ordered=True, categories=['B','A'])

#another solution for lower pandas versions
#df['Col_2'] = pd.CategoricalIndex(df['Col_2'], ordered=True, categories=['B','A'])

df['new_col1'] = df.groupby('Col_1')['Col_2'].transform('max')
print (df)
   Col_1 Col_2 new_col new_col1
0      1     A       A        A
1      1     B       A        A
2      2     B       B        B
3      3     A       A        A
4      4     B       A        A
5      4     A       A        A

Series.map另一种具有优先级的双倍字典的解决方案:

d = {'A':2, 'B':1}
#swap keys with values
d1 = {v:k for k, v in d.items()}
df['new_col1'] = df['Col_2'].map(d).groupby(df['Col_1']).transform('max').map(d1)
print (df)
   Col_1 Col_2 new_col new_col1
0      1     A       A        A
1      1     B       A        A
2      2     B       B        B
3      3     A       A        A
4      4     B       A        A
5      4     A       A        A

推荐阅读