【问题标题】:pytest assert if a column is ascending or descending within another already sorted grouppytest 断言如果列在另一个已排序的组中是升序还是降序
【发布时间】:2020-12-04 16:17:46
【问题描述】:

我正在运行以下代码:

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 的所有值是否也是单调的?

【问题讨论】:

  • 澄清:B 列的值也是单调的(对于 A 的任何给定值降序)。 B 为 84、43、35、34.. 当 A 为 0 时。

标签: python pandas data-science pytest


【解决方案1】:

您可以使用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 对象。如果你遍历那个对象,你会得到 index 和 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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多