python - 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 的所有值是否也是单调的?
解决方案
您可以使用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
请注意,如果您想知道数据集是单调递增还是递减,则必须同时检查两者,如示例所示。
推荐阅读
- python - Python:将二进制字符串转换为文本文件
- rest - 通过 google gmail api 仅下载电子邮件回复中的新内容
- window-functions - Presto 中的结转值
- javascript - .io 客户端渲染的建议
- javascript - 如何获取幻灯片的语言?
- asp.net - ASP.Net Core MVC CRUD 弹出模式
- excel - 使用 LinEst 函数并在可变长度的列中返回值
- swift - 如果为目标视图指定了初始帧,为什么 AutoLayout 不遵守约束?
- angular - 从 CanDeactivateGuard 中的错误组件获取属性
- c# - 为什么我的 ListView 在使用分组时不显示任何内容?