在熊猫数据框中分组优先

时间:2019-05-10 08:04:43

标签: pandas

我需要从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

1 个答案:

答案 0 :(得分:3)

通过在列参数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