python-3.x - 如何评估熊猫的多列?
问题描述
我有以下熊猫数据框:
col1 col2 col3 .... colN
5 2 4 .... 9
1 2 3 .... 9
7 1 4 .... 0
1 4 7 .... 8
我需要的是一种确定几列之间顺序的方法:
col1 col2 col3 .... colN
5 2 4 .... 9 ----> colN >= ... >= col5 >= col2 >= col3
1 2 3 .... 9 ----> colN >= ... >= col3 >= col2 >= col1
7 1 4 .... 0 ----> col1 >= ... >= col3 >= col2 >= colN
1 4 7 .... 8 ----> colN >= ... >= col3 >= col2 >= col1
并给他们一个数字别名。例如:
colN >= ... >= col5 >= col2 >= col3 = X
colN >= ... >= col3 >= col2 >= col1 = Y
col1 >= ... >= col3 >= col2 >= colN = Z
:
:
col1 col2 col3 .... colN order
5 2 4 .... 9 X
1 2 3 .... 9 Y
7 1 4 .... 0 Z
1 4 7 .... 8 Y
:
:
列数可能会改变,并且别名必须跟随赞助人。具有 3 列的示例:
col1 >= col2 >= col3 = 1
col1 >= col3 >= col2 = 2
col2 >= col1 >= col3 = 3
col2 >= col3 >= col2 = 4
col3 >= col1 >= col2 = 5
col3 >= col2 >= col1 = 6
谢谢并恭祝安康
解决方案
您可以使用:
df['order'] = df.apply(lambda x: '>='.join(x.sort_values(ascending=False).index), axis=1)
df['alias'] = df.groupby('order').ngroup() + 1
Input
col1 col2 col3
0 5 2 4
1 1 2 3
2 7 1 4
3 1 4 7
Output:
col1 col2 col3 order alias
0 5 2 4 col1>=col3>=col2 1
1 1 2 3 col3>=col2>=col1 2
2 7 1 4 col1>=col3>=col2 1
3 1 4 7 col3>=col2>=col1 2
或针对特定模式:
alias_pattern = {'col1>=col3>=col2' : 2, 'col3>=col2>=col1' : 5}
df['alias'] = df['order'].map(alias_pattern)
Output:
col1 col2 col3 order alias
0 5 2 4 col1>=col3>=col2 2
1 1 2 3 col3>=col2>=col1 5
2 7 1 4 col1>=col3>=col2 2
3 1 4 7 col3>=col2>=col1 5
推荐阅读
- ios - 单击嵌入在表格视图单元格中的集合视图单元格时继续
- python - 列表的返回函数没有显示在python的屏幕上
- c# - 数据库已被计算机上的用户“管理员”置于阻止其打开或锁定的状态
- c++ - 如何切片可变参数模板参数并使用它们?
- javascript - 从后台页面传递 XML 数据时,无法从 chrome.storage.sync.get 检索值
- linux - 如何在linux中列出以特定模式开头和结尾的文件
- r - 我在 R Markdown 中使用 kable 并在我的表格中添加标题,在输出 PDF 文件中,表格放在页面底部
- python - Pandas group来自 ewm
- java - java正则表达式匹配器是有状态的吗?
- reactjs - Parent - 子组件和数据职责(子组件应该调用 API 吗?)