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