假设一个数据框:
>>> 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
:提供self
和input
的逐元素比较,所以要有一个 bool 数组是否给定元素(或行)最高。
关于python - 将列值与行切片中的 n 行值进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60022764/