如何通过比较熊猫中的多个列来查找具有最大值的列名称

时间:2019-01-25 06:56:45

标签: python pandas

我需要在许多列中具有相同值的列名称,我需要在另一列中选择最后一个最大值列名称。 例如

    service-a:
        build:
          context: .
          dockerfile: DockerfileA
        command: node serviceA.js
        environment:
            KEY=DockerComposeRun

输出应类似于

   KEY    A    B    C    D    E   F
0    1  100  100  100  100   50  50
1    2  200  200  200   50  200  50

请帮助我获得结果。我尝试使用 KEY A B C D E F G 0 1 100 100 100 100 50 50 D 1 2 200 200 200 50 200 50 E 来拉第一个匹配项,并给我第一个列名。

我有一个像df这样的数据帧

.idxmax(axis=1)

我运行查询

SITE    Counter KEY Full_name   B   C   D   E   F
LO  ALA LO_ALA  ALPHA   100 100 100 50  50
LO  BLA LO_BLA  BALPA   200 200 50  200 50
LO  ALA LO_ALA  ALPHA   1000    1000    1000    100 1000
LO  BLA LO_BLA  BALPA   2000    2000    100 2000    1000

在上面的代码之后,我为每个KEY获取一个值,然后我需要的是与最后一个匹配的列名

接下来我运行df['G'] = df[["B","C","D","E","F"]].values.max(1) df = df.sort_values(['MAX_LIMIT'], ascending=[0]) df = df.drop_duplicates(['KEY'], keep='first')

我需要输出为

df['H'] =df[["B","C","D","E","F"]].idxmax(axis =1)

但是我要得到的输出是

SITE    Counter KEY Full_name G     H
LO  ALA LO_ALA  ALPHA   1000    F   
LO  BLA LO_BLA  BALPA   2000    E

1 个答案:

答案 0 :(得分:2)

反转列并找到idxmax

df.set_index('KEY', inplace=True)
df[df.columns[::-1]].idxmax(axis=1)

KEY
1    D
2    E
dtype: object

编辑:更改查询,例如:

df['G'] = df[["B","C","D","E","F"]].values.max(1)
df = df.drop_duplicates(['KEY'], keep='last')
df['H'] = df[df.columns[4:-1][::-1]].idxmax(axis=1)

print(df)
  SITE Counter     KEY Full_name     B     C     D     E     F     G  H
2   LO     ALA  LO_ALA     ALPHA  1000  1000  1000   100  1000  1000  F
3   LO     BLA  LO_BLA     BALPA  2000  2000   100  2000  1000  2000  E