首页 > 解决方案 > 将列值与行切片中的 n 行值进行比较

问题描述

假设一个数据框:

>>> data = pd.DataFrame([[9],[5],[1],[2]])
>>> data
   0
0  9
1  5
2  1
3  2

假设我想添加一个列来比较前 2 行或 n 行,如果这些数字中的任何一个高于当前数字,则写 False,否则为 True 表示前 2 或 n 行中没有数字高于当前行。

例子:

   0  Highest
0  9   True
1  5   True
2  1   False
3  2   NaN

9 高于 5 和 1,5 高于 1 和 2,但 1 不高于 2 等等。我需要用 n 行执行此操作,从 20 到 50+

标签: pythonpandas

解决方案


使用pandas.Series.rolling.max

s = data[0]
data["Highest"] = s.eq(s[::-1].rolling(2).max())
print(data)

输出:

   0  Highest
0  9     True
1  5     True
2  1    False
3  2    False

洞察力:

  • s[::-1]:给定 OP 的条件,最大比较是在接下来的n 个项目上进行的。IMO,这与以相反的方式比较系列相同。
  • pd.Series.rolling:提供n滚动窗口计算。换句话说,为本地比较创建小批量。然后max按照 OP使用
  • pd.Series.eq: 提供 和 的元素比较selfinput因此无论给定元素(或行)是否最高,都有一个布尔数组。

推荐阅读