我只想选择具有三个或更多连续值的行。
[结果]
有没有使用 pandas 或 numpy 的简单方法?
最佳答案
IIUC,计算一个 diff
在列上,选择等于 1 的值(即连续值)(使用 eq
)并确定是否有任何 3 个连续值使用 rolling.sum
.使用生成的 Series 执行 boolean indexing :
N=3
df[df.diff(axis=1).eq(1).T.rolling(window=N).sum().ge(N).any()]
输出:
num1 num2 num3 num4 num5 num6
0 1 2 3 4 5 6
1 3 7 8 9 10 11
2 9 13 21 22 23 24
连续值的中间计数:
>>> df.diff(axis=1).eq(1).T.rolling(window=3).sum()
0 1 2 3
num1 NaN NaN NaN NaN
num2 NaN NaN NaN NaN
num3 2.0 1.0 0.0 0.0
num4 3.0 2.0 1.0 0.0
num5 3.0 3.0 2.0 0.0
num6 3.0 3.0 3.0 0.0
这只是计算连续值的数量,而不是它们是否都是连续的。例如 1-2-4-5-7-8 会算作连续 3 个,但它们并不都是连续的 *
N = 3
df1 = df[df.diff(axis=1).eq(1).sum(axis=1).ge(N)]
https://stackoverflow.com/questions/71583732/