如何判断Pandas的Volume列中每个后续值均大于前序值?Python实现
判断DataFrame中Volume列是否严格递增的Pythonic实现
给定如下df_trading_pair DataFrame:
Start Date Open Price High Price Low Price Close Price Volume End Date 0 2022-08-06 05:30:00 0.3738 0.3741 0.3737 0.3739 13767.0 2022-08-06 05:32:59.999 1 2022-08-06 05:33:00 0.3739 0.3742 0.3738 0.3741 28212.0 2022-08-06 05:35:59.999 2 2022-08-06 05:36:00 0.3740 0.3743 0.3739 0.3740 47274.0 2022-08-06 05:38:59.999 3 2022-08-06 05:39:00 0.3740 0.3740 0.3737 0.3739 55859.0 2022-08-06 05:41:59.999
要判断Volume列是否每个后续值都严格大于前一个值,原硬编码索引的写法不够灵活,这里提供几种更Pythonic的实现方案:
方案1:使用pandas的diff()方法
diff()会计算序列中后一个元素与前一个元素的差值,通过判断所有差值是否大于0来确认是否严格递增:
volume_series = df_trading_pair["Volume"] # 计算差值,去掉第一个NaN值,判断所有差值>0,最后取整体结果 is_strictly_increasing = (volume_series.diff().dropna() > 0).all() print(is_strictly_increasing)
方案2:使用pandas的shift()方法
shift(1)将序列整体下移一位,直接比较当前元素与前一位元素的大小:
volume_series = df_trading_pair["Volume"] # 比较当前值与前一位值,去掉第一个无效的比较结果,判断全部为True is_strictly_increasing = (volume_series > volume_series.shift(1)).dropna().all() print(is_strictly_increasing)
方案3:纯Python列表遍历(兼容非pandas场景)
如果需要脱离pandas依赖,可以将Series转为列表,用zip配对相邻元素进行判断:
volume_list = df_trading_pair["Volume"].tolist() # 遍历相邻元素对,判断每一对都是前小后大,all()确认全部满足 is_strictly_increasing = all(a < b for a, b in zip(volume_list, volume_list[1:])) print(is_strictly_increasing)
这些方案的优势在于:无需硬编码索引,适配任意行数的数据集,符合Python和pandas的惯用写法,可读性和扩展性更强。
内容的提问来源于stack exchange,提问作者NoahVerner
相关产品推荐
相关产品推荐

