python - 将列值与行切片中的 n 行值进行比较

标签 python pandas

假设一个数据框:

>>> 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+

最佳答案

使用 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滚动窗口计算。换句话说,创建用于本地比较的小批量。然后根据 OP 使用 max
  • pd.Series.eq:提供selfinput的逐元素比较,所以要有一个 bool 数组是否给定元素(或行)最高。

关于python - 将列值与行切片中的 n 行值进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60022764/

相关文章:

python - 如何有效地删除 pandas 中某些列的值高于第 99 个百分位数的所有行?

python - python 库 "urwid"是否包含用于读取日期的小部件(日期选择器)?

python - 为什么 Python 计算的 "hashlib.sha1"与文件的 "git hash-object"不同?

python - 如何退出程序 : sys. stderr.write() 或打印

pandas - 对 DataFrame 中的条目进行分组和计数

python - 给 Pandas 细胞赋值的最快方法

python - 使用matplotlib设置图例符号不透明度?

python - mySQL 在两个 DATETIME 之间选择

python - 将朱利安日期解析为月份和月份日期

python - 有没有办法将时间序列数据重新采样为 x 小时并以 One-Hot 编码格式获得输出?