首页 > 解决方案 > 如何评估熊猫的多列?

问题描述

我有以下熊猫数据框:

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

谢谢并恭祝安康

标签: python-3.xpandasdataframe

解决方案


您可以使用:

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

推荐阅读