Pandas 熊猫检查列表是否单调递增,但有特定的步长

Pandas 熊猫检查列表是否单调递增,但有特定的步长,pandas,dataframe,Pandas,Dataframe,假设df中有以下列: A B C 0 1 0 1 1 2 2 2 2 3 4 4 3 4 6 6 4 5 8 8 我知道我可以检查每一个特定的列,每个列都是单调的 df['A'].is_monotonic_increasing. 我想知道是否有一种方法可以检查/验证单调递增有一个特定的步骤。让我解释一下。例如,我想检查df['A']是否随步骤1单调增加,df['B']是否随步骤2单调增加 有什么方法可以检查吗?我认为没有这个功能。我们可以构建一个两行函

假设df中有以下列:

   A  B  C
0  1  0  1
1  2  2  2
2  3  4  4
3  4  6  6
4  5  8  8
我知道我可以检查每一个特定的列,每个列都是单调的

df['A'].is_monotonic_increasing.
我想知道是否有一种方法可以检查/验证单调递增有一个特定的步骤。让我解释一下。例如,我想检查
df['A']
是否随步骤1单调增加,
df['B']
是否随步骤2单调增加


有什么方法可以检查吗?

我认为没有这个功能。我们可以构建一个两行函数:

def step_incr(series, step=1):
    tmp = np.arange(len(series)) * step
    return series.eq(series.iloc[0]+tmp).all()

step_incr(df['A'], step=1)
# True

step_incr(df['B'], step=1)
# False
另一种检查方法是查看差异值:

def is_step(series):
    uniques = series.diff().iloc[1:].unique()

    if len(uniques) == 1:
        return True, uniques[0]
    return False, None

is_step(df['A'])
# (True, 1.0)

is_step(df['B'])
# (True, 2.0)

is_step(df['C'])
# (False, None)

我不认为有这样的功能。我们可以构建一个两行函数:

def step_incr(series, step=1):
    tmp = np.arange(len(series)) * step
    return series.eq(series.iloc[0]+tmp).all()

step_incr(df['A'], step=1)
# True

step_incr(df['B'], step=1)
# False
另一种检查方法是查看差异值:

def is_step(series):
    uniques = series.diff().iloc[1:].unique()

    if len(uniques) == 1:
        return True, uniques[0]
    return False, None

is_step(df['A'])
# (True, 1.0)

is_step(df['B'])
# (True, 2.0)

is_step(df['C'])
# (False, None)

一次获得所有柱的一个衬里:

 df.diff().iloc[1] * (df.diff().nunique() == 1)
输出:

A    1.0
B    2.0
C    0.0
Name: 1, dtype: float64

输出是步长,如果不是单调递增,则为0。

一行一次获得所有列:

 df.diff().iloc[1] * (df.diff().nunique() == 1)
输出:

A    1.0
B    2.0
C    0.0
Name: 1, dtype: float64

输出是步长,如果不是单调递增,则为0。

确切地说是1的步长,或者至少是1的步长?类似于
df.C.是单调递增的&(df.C.diff()==2)
,但是
的第一行.diff()
总是
False
。所以
(df.A.is_单调_递增&(df.A.diff()==1)).iloc[1:]。all()
正好是1的一步,或者至少是1的一步?类似
df.C.is_单调_递增&(df.C.diff()==2)
,但
.diff()
的第一行总是
False
。因此
(df.A.is_monotonic_increating&(df.A.diff()==1)).iloc[1:]all()
我认为答案需要解释函数在做什么,即用给定的步长构建一个大小相同的数组,然后将其与序列进行比较。我认为答案需要解释函数在做什么,这就是用给定的步长构建一个相同大小的数组,然后将其与序列进行比较。