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
解决方案
通过在列参数中排序来使用具有设置优先级的有序分类,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
推荐阅读
- amazon-web-services - 移动到 ipv6 后,AWS Ec2 ping 不起作用
- python - 上传和播放视频烧瓶的问题?
- django - 为什么使用视图中的 values() 方法在 img 标签中不显示缩略图?
- plotly - Plotly.js 中的二次趋势线?
- centos7 - 无法删除 /etc/pam.d 目录中的 root 文件
- woocommerce - Woocommerce 产品插件使用 rest Api 发布值
- android - 尝试通过 adb shell 访问 chrome 内容提供程序时收到“未找到结果”消息
- r - 如何仅使用一个跨多个选项卡同步的日期范围输入?
- python - 如何使用 camelot 模块创建可执行文件?
- docker - 无法使用 Docker 拉取图像