Pandas 熊猫检查列表是否单调递增,但有特定的步长
假设df中有以下列: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单调增加 有什么方法可以检查吗?我认为没有这个功能。我们可以构建一个两行函
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()
我认为答案需要解释函数在做什么,即用给定的步长构建一个大小相同的数组,然后将其与序列进行比较。我认为答案需要解释函数在做什么,这就是用给定的步长构建一个相同大小的数组,然后将其与序列进行比较。