我有一列带有浮点值。该列有 300 行。我想获得每行的成对最大值及其下方的行。例如:如果我的列有 2、25、1、24 作为行值,我想找到 2 和 25 的最大值,然后找到 25 和 1 的最大值,依此类推。我还希望能够创建一个具有最大值的新列。我该怎么做?
如何使用python找到列中多行的成对最大值?
数据挖掘
Python
熊猫
2022-02-26 01:07:26
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])
将返回成对最大值和对应于该值的索引。