测量datafram中接下来N行的偏差

2024-04-18 07:27:32 发布

您现在位置:Python中文网/ 问答频道 /正文

这个问题是建立在上一个问题的基础上的:create new column that compares across rows in pandas dataframe

我想创建一个新列,检查下一个n行的差异是否大于X。例如,如果我们有一个dataframe,而接下来的4行的差值大于1,那么新值将为0。如果后面4行的差值小于或等于1,则新值将为1。在

>>> df = pandas.DataFrame({"A": [5,6,4,3,5]})
>>> df
   A
0  5
1  6
2  4
3  3
4  5
>>> desired_result = pandas.DataFrame({"A": [5,6,7,8,2], "new":     [1,1,0,0,0]})
>>> desired_result
   A  new
0  5    1
1  6    0
2  4    1
3  3    0
4  5    0

在下一个例子中,1和5的绝对值等于绝对值(1-5等于绝对值)。在

我试图用上面的代码来解决这个问题:

^{pr2}$

这段代码在只查看下一行时有效,但我不确定将其扩展到n行的最佳方法是什么。在


Tags: 代码dataframepandasdfnewthatcreatecolumn
2条回答
n = 2  # Number of following rows
x = 1  # Differ by more than 'x'.

>>> pd.concat([(df.A - df.A.shift(-i - 1)).abs().le(x) 
               for i in range(n)], axis=1).any(axis=1) * 1
0    1
1    0
2    1
3    0
4    0
dtype: int64

移位被执行n次,并与当前值进行比较,得到以下布尔值:

^{pr2}$

然后跨行对这些结果进行比较,寻找任何真正的值。最后,布尔结果乘以1,将其转换为1和0。

`pd.concat(...).any(axis=1) * 1`

您可以使用^{}^{}的组合。

例如,如果周期为2,则

df = pd.DataFrame({"A": [5,6,4,3,5]})
>>> pd.rolling_max(df.A.shift(-1), 2).shift(-1)    
0     6
1     4
2     5
3   NaN
4   NaN
Name: A, dtype: float64

给出接下来2个句点的最大值(注意末尾的两个NaN,其中的内容只是没有定义)。

通常,对于大小为k的窗口,可以使用

^{pr2}$

从这一点开始,您可以将原始系列减去1与结果进行比较:

df.A - 1 > pd.rolling_max(...

相关问题 更多 >