首页 > 编程问答 >返回列中负数最多的组的最佳方法是什么?

返回列中负数最多的组的最佳方法是什么?

时间:2024-08-02 17:16:32浏览次数:6  
标签:python pandas dataframe

我的数据帧是:

import pandas as pd
df = pd.DataFrame(
    {
        'a': [-3, -1, -2, -5, 10, -3, -13, -3, -2, 1, 2, -100],
    }
)

预期输出:

      a
0    -3
1    -1
2    -2
3    -5

逻辑:

我想返回最大的负数条纹。如果有多个连续最大,我想返回第一个连续。在 df 中有两条大小为4的负条纹,因此返回第一个。

这是我的尝试,但每当我在代码中使用 idxmax() 时,我想仔细检查,因为有时它会变得棘手一些场景。

import numpy as np 
df['sign'] = np.sign(df.a)
df['sign_streak'] = df.sign.ne(df.sign.shift(1)).cumsum()
m = df.sign.eq(-1)

group_sizes = df.groupby('sign_streak').size()
largest_group = group_sizes.idxmax()
largest_group_df = df[df['sign_streak'] == largest_group]

的方法和对 idxmax() 的谨慎是合理的。 但是,可以通过利用 Pandas 的一些内置功能来简化逻辑并避免使用 idxmax() 的潜在陷阱:

import pandas as pd
import numpy as np

df = pd.DataFrame({'a': [-3, -1, -2, -5, 10, -3, -13, -3, -2, 1, 2, -100]})

# 计算符号和符号变化
df['sign'] = np.sign(df.a)
df['sign_change'] = (df.sign != df.sign.shift()).cumsum()

# 为负数序列创建一个组
df['negative_group'] = (df.sign == -1).cumsum()

# 获取每个组的大小并找到最大组的索引
group_sizes = df[df.sign == -1].groupby('negative_group').size()
max_group_index = group_sizes.index[0] if len(group_sizes) > 0 else None

# 提取最大负序列
result = df[df.negative_group == max_group_index]

print(result)

解释:

  1. 标识符号变化: 与的方法类似,此代码会标识数字符号的变化。
  2. 负数组: 它会创建一个新的组变量 negative_group ,该变量仅在遇到负数时递增。 这将所有负序列分组在一起。
  3. 查找最大组: 它会计算每个 negative_group 中的大小,找到最大组,并提取其索引。
  4. 提取结果: 最后,它根据确定的 negative_group 索引提取属于最大负序列的行。

这段代码没有依赖 idxmax() ,而是直接使用组大小信息来找到最大负序列。 这使得逻辑更加健壮和易于理解。

标签:python,pandas,dataframe
From: 78824644

相关文章

  • 找出 python 脚本完成执行所需的时间
    我在python脚本中有以下代码:deffun():#Codeherefun()我想执行此脚本,并找出执行时间(以分钟为单位)。如何查明该脚本的执行时间?一个例子将非常感激。你可以使用time模块来测量Python脚本的执行时间。方法如下:importtimedeffun():#代码写在......
  • Python基础教程:全方位掌握print函数
    文章目录1.基本打印2.打印多个参数3.格式化输出使用`%`格式化使用`.format()`方法使用f-string(Python3.6+)4.自定义分隔符5.抑制换行6.打印到文件7.打印对象的字符串表示8.打印时的错误处理9.立即刷新输出缓冲区10.结语1.基本打印打印文本或变......
  • 如何使用Python代码获取Power Bi Visual Level数据
    我有一个Powerbi报告,托管在本地报告服务器上。现在我想使用python代码检索视觉级别数据。例如,我有一个卡片视觉效果,显示为“100”,这个“100”是根据度量计算的,对于某些视觉效果,该值直接来自数据集中的列值。现在我想检索测量值为“100”,而且我还需要直接来自python代......
  • 如何在python中通过requests和opencv加载uint16 png文件
    我正在尝试从URL自动加载图像,然后将其加载到numpy矩阵。为此,我需要使用requests和opencv库。对于像uint8这样编码的标准图像,它以正确的方式工作,并且由于值溢出而损坏了uint16图像。这是我现在正在使用的一个简单的最小代码:importrequestsimportcv2importnumpy......
  • Selenium + Python 自动化测试01(准备篇)
        本篇文章主要讲述Selenium+Python自动化测试-准备篇。主要时相关软件介绍,下载,安卓等。一、Selenium简介    1、Selenium是什么?        官网描述:        Primarily,itisforautomatingwebapplicationsfortestingpurposes,......
  • 如何使用 Python 在 2D 曲面上切割 3D 体积?
    考虑3D中的闭合表面网格(mesh1),由两个合并块组成,如图所示。两个合并块,具有不同颜色的细分补丁。网格以STL文件形式给出,并被细分分成不同的补丁。每个面片都在STL文件中保存为单独的实体。此外,我有一个由STL文件给出的弯曲2D表面网格(......
  • Python教程(十):面向对象编程(OOP)
    目录专栏列表前言一、面向对象编程概述1.1类和对象1.2继承1.3多态1.4封装二、Python中的类和对象2.1定义类2.2`__init__`函数解释2.3创建对象三、继承3.1基本继承3.2创建子类对象四、多态五、封装六.访问限制七、综合实例结语专栏列表Python教程(一):环......
  • Qt C++ 调用 Python 之 PyObject* 数据类型转换
    整数:PyLong_FromLong和PyLong_AsLong类型检查函数:PyLong_Check()intcppInt=42;//C++整数转换为Python整数对象PyObject*pyInt=PyLong_FromLong(cppInt);//Python整数对象转换为C++整数longcppIntFromPy=PyLong_AsLong(pyInt);Py_DECREF(pyInt)......
  • Python 警告:重试(重试(总计=4,连接=无,读取=无,重定向=无,状态=无))
    我正在尝试pipinstall--upgradepip并保持收到此错误:WARNING:Retrying(Retry(total=4,connect=None,read=None,redirect=None,status=None))afterconnectionbrokenby'ProxyError('Cannotconnecttoproxy.',NewConnectionError('<......
  • 如何计算 pandas DataFrame 列中的 NaN 值?
    我想找到数据每列中NaN的数量。可以使用isna()方法加上sum()方法来计算PandasDataFrame列中的NaN值数量。以下是一个示例:importpandasaspd#创建一个示例DataFramedf=pd.DataFrame({'A':[1,2,None,4],'B':[5,Non......