Python pandas.DF()中的列是否单调递增?

Python pandas.DF()中的列是否单调递增?,python,pandas,data-analysis,Python,Pandas,Data Analysis,我可以使用is_单调方法检查pandas.DataFrame()的索引是否单调递增。但是,我想检查列值中是否有一个严格递增(float/integer) 你可以计算一下这个: diff = df[0] - df[0].shift(1) is_monotonic = (diff < 0).sum() == 0 or (diff > 0).sum() == 0 diff=df[0]-df[0].移位(1) 是单调的=(diff0)。sum()=0 你在这里检查的是,要么差值都>=0要

我可以使用is_单调方法检查pandas.DataFrame()的索引是否单调递增。但是,我想检查列值中是否有一个严格递增(float/integer)


你可以计算一下这个:

diff = df[0] - df[0].shift(1)
is_monotonic = (diff < 0).sum() == 0 or (diff > 0).sum() == 0
diff=df[0]-df[0].移位(1)
是单调的=(diff<0)。sum()=0或(diff>0)。sum()=0
你在这里检查的是,要么差值都>=0要么都,我知道严格地增加值意味着值是整数,相邻的值正好被1隔开?如前所述,这是一种检查命名标准的简单方法:

def is_coherent(seq):
    return seq == range(seq[0], seq[-1]+1)
将它与您的
my_df
的第一列一起使用可能看起来是这样的:

is_coherent(my_df[0].tolist())

最好的方法可能是在不复制数据的情况下(通过索引使用列后选择),将dataframe列作为numpy数组获取,然后使用基于numpy的测试检查单调性:

def monotonic(x):
    return np.all(np.diff(x) > 0)

monotonic(df[0].values)
从这里借用的纯Python实现:

def严格递增(L):

返回全部(x如果两个索引相等,则它们不会是唯一的。因此,您可以使用:

my_df.Index.is_monotonic and my_df.Index.is_unique
这些属性记录在版本15.2中;在14.1中粗略地提到了is_unique,但对我来说是有效的。请参阅


Pandas 0.19添加了一个公共API(以前,该API仅在未记录的
algos
模块中可用)

(更新)请注意,尽管名称不同,
Series.is\u monotonic
仅表示序列是否单调递增(相当于使用
Series.is\u monotonic\u increating
)。相反,使用
Series.is\u monotonic\u increating
。 无论如何,两者都是不严格的,但你可以将它们与结合起来以获得严格性

e、 g:

您可以使用
apply
在数据帧级别运行此操作:

my_df = pd.DataFrame({'A':[1,2,3],'B':[1,1,1],'C':[3,2,1]})
my_df
Out[32]: 
   A  B  C
0  1  1  3
1  2  1  2
2  3  1  1

my_df.apply(lambda x: x.is_monotonic)
Out[33]: 
A     True
B     True
C    False
dtype: bool

请准确说明“严格增加”的含义。在您的示例中,预期的结果是什么?@amehta-如果其中一个答案帮助了您(或至少使您更接近您的目标:-),请接受它。是的,增加,但不是具体地增加1。那么,“严格”是什么意思?严格单调递增意味着xdef strictly_increasing(L): return all(x<y for x, y in zip(L, L[1:]))
my_df.Index.is_monotonic and my_df.Index.is_unique
my_df = pd.DataFrame([1,2,2,3], columns = ['A'])

my_df['A'].is_monotonic    # non-strict
Out[1]: True

my_df['A'].is_monotonic_increasing    # equivalent to is_monotonic
Out[2]: True

(my_df['A'].is_monotonic_increasing and my_df['A'].is_unique)    # strict  
Out[3]: False

my_df['A'].is_monotonic_decreasing    # Other direction (also non-strict)
Out[4]: False
my_df = pd.DataFrame({'A':[1,2,3],'B':[1,1,1],'C':[3,2,1]})
my_df
Out[32]: 
   A  B  C
0  1  1  3
1  2  1  2
2  3  1  1

my_df.apply(lambda x: x.is_monotonic)
Out[33]: 
A     True
B     True
C    False
dtype: bool