如何使用python找到列中多行的成对最大值?

数据挖掘 Python 熊猫
2022-02-26 01:07:26

我有一列带有浮点值。该列有 300 行。我想获得每行的成对最大值及其下方的行。例如:如果我的列有 2、25、1、24 作为行值,我想找到 2 和 25 的最大值,然后找到 25 和 1 的最大值,依此类推。我还希望能够创建一个具有最大值的新列。我该怎么做?

2个回答

您可以创建一个新列,就像您拥有的列一样,但向下“移动”了一个位置,并计算这两列的最大值:

import pandas as pd
import numpy as np

data = np.random.randint(0, 50, size=20)
df = pd.DataFrame(data, columns=['values'])
df['prev'] = df['values'].shift(1)
df['max'] = df[['values', 'prev']].max(axis=1)

结果是

+----+----------+--------+-------+
|    |   values |   prev |   max |
|----+----------+--------+-------|
|  0 |       17 |    nan |    17 |
|  1 |       32 |     17 |    32 |
|  2 |        3 |     32 |    32 |
|  3 |        4 |      3 |     4 |
|  4 |        4 |      4 |     4 |
|  5 |       17 |      4 |    17 |
|  6 |       12 |     17 |    17 |
...

如果不需要,您可以删除第一行。

这将是另一种更短的方法:

df.assign(resultado = lambda x: x.rolling(2).max())

编辑:

对于您的评论,请尝试

def idx(x):
    return x.index.values[np.argmax(x.values)]

df.rolling(2).agg(['max', idx])

将返回成对最大值和对应于该值的索引。