python - 检查 Pandas 系列中的最大值,其中该系列包含具有数值的字母
问题描述
我有一个包含 6 列的 pandas 数据框,每列都有一个“状态”。这些状态可以是以下任何一种:T, N, 0, U, D, 1, 2, 3, 4, 5, 6, 8
。出于比较的目的,T > N > 0 > U > D > 1 > 2...
我想要实现的是创建一个新列,WORST STATUS
它可以从该列表中挑选出最大值(类似于df.max()
max 方法可以识别“U”大于 0。
我知道我可能可以将这一切包含在 if-else 中并进行元素比较,但我想知道是否还有更“干净”的东西?
解决方案
您可以使用ordered Categorical
,因此可能使用max
功能:
df = pd.DataFrame(data={'col':[1, 2, 3, 4, 'N', 'N', 0, 'U', 'D', 5, 6, 8]})
cats = ['T', 'N', 0, 'U', 'D', 1, 2, 3, 4, 5, 6, 8]
df['col'] = pd.Categorical(df['col'], ordered=True, categories=cats[::-1])
print (df['col'])
Categories (12, object): [8 < 6 < 5 < 4 ... 'U' < 0 < 'N' < 'T']
#in data is no T, so N is maximal
print (df['col'].max())
N
如果需要处理多个列:
cols = ['col1','col2','col3']
df[cols] = df[cols].apply(lambda x: pd.Categorical(x, ordered=True, categories=cats[::-1]))
进而:
print (df[cols].max(axis=1))
推荐阅读
- google-apps-script - 附加菜单不出现
- julia - 如何在 Julia 中将矩阵漂亮地打印到字符串?
- flutter - 如何通过主题更改 Flutter 中抽屉的标准汉堡菜单图标的大小
- postgresql - 在 postgres 的事务中运行代码块
- events - 我可以只为以太坊网络中的一个地址触发事件吗?
- python - PyInstaller 操作系统库依赖项和 Chroot
- python - 为什么我的 pdf 文件保存由 matplotlib 创建的条形图为空白
- php - 如果用户关闭购买窗口,我如何删除创建的用户?
- magento - Magento 2 属性价格不更新
- sas - 在 Excel 文件上使用 proc import 后,我如何使用该数据?