首页 > 解决方案 > pytest 断言如果列在另一个已排序的组中是升序还是降序

问题描述

我正在运行以下代码:

import numpy as np
import pandas as pd

dfTestExample = pd.DataFrame(np.random.randint(0,100,size=(1000, 4)), columns=list('ABCD'))

dfTestExample = dfTestExample.sort_values(["A", "B"], ascending = [True, False])

dfTestExample.head(10)

产生

    A   B   C   D
303 0   84  13  96
728 0   43  48  32
558 0   35  49  49
286 0   34  17  4
652 0   29  53  4
292 0   18  62  29
139 0   17  63  99
718 1   91  6   48
611 1   83  19  75
208 1   80  35  73
dfTestExample.A.is_monotonic
True
dfTestExample.B.is_monotonic
False

如何检查 B 列对于 A 的所有值是否也是单调的?

标签: pythonpandasdata-sciencepytest

解决方案


您可以使用groupby将数据框拆分为以下每个值的单独组A

monotonic = True
for group in df.groupby(['A']):
    b = group[1].B
    if not b.is_monotonic and not b.is_monotonic_decreasing:
        monotonic = False
print(monotonic)

groupby给你一个DataFrameGroupBy对象。如果你遍历那个对象,你会得到索引和DataFrame对象的元组,你可以分别处理它们。在您的情况下,分组DataFrame对象将如下所示:

    A   B   C   D
303 0   84  13  96
728 0   43  48  32
558 0   35  49  49
286 0   34  17  4
652 0   29  53  4
292 0   18  62  29
139 0   17  63  99

和:

    A   B   C   D
718 1   91  6   48
611 1   83  19  75
208 1   80  35  73

请注意,如果您想知道数据集是单调递增还是递减,则必须同时检查两者,如示例所示。


推荐阅读