我需要从 Col_2 中选择字母到 new_col 中。当有 2 个值:A、B 时,我想根据 Col_2 中的值给予优先级。在有由 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
Run Code Online (Sandbox Code Playgroud)
通过在列参数中排序来使用具有设置优先级的有序分类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
Run Code Online (Sandbox Code Playgroud)
另一个具有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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
924 次 |
| 最近记录: |