【问题标题】:First pandas DataFrame column index greater than x第一个大于 x 的 pandas DataFrame 列索引
【发布时间】:2019-09-06 22:23:54
【问题描述】:

我知道将 pandas DataFrame 列转换为列表(使用.tolist()list()),然后做你想做的事,会慢得多,所以我不想使用these methods

我想找到pandas DataFrame 列的第一个元素的索引,该索引等于或大于值x,即>=x。如果没有,则返回None

例如,如果列是this并且我们的函数被称为first_greater()

    0
0   1
1  -5
2   6
3   4
4  -7
5  12
6  -2
7   0
8  -3

那么我们有:

first_greater(-5) = 0
first_greater(7) = 5
first_greater(4) = 2
first_greater(6) = 2
first_greater(22) = None

我是 pandas 的新手,我不知道该怎么做。任何帮助将不胜感激。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您要检查数据框中的任何值是否大于给定值,并返回满足条件的第一个值。为此,您有 idxmax

    def first_greater(df, n, col):
        m = df.col.ge(n)
        return m.any() and m.idxmax() 
    

    请注意,在 return 语句中,and 的右侧部分仅在满足第一个条件 m.any() 时才计算,否则返回 False


    让我们来看看建议的例子:

    first_greater(df, 5, 'col1')
    # 0
    
    first_greater(df, 7, 'col1')
    # 5
    
    first_greater(df, 4, 'col1')
    # 2
    
    first_greater(df, 6, 'col1')
    # 2
    
    first_greater(df, 22, 'col1')
    # False
    

    输入数据-

        col1
    0     1
    1    -5
    2     6
    3     4
    4    -7
    5    12
    6    -2
    7     0
    8    -3
    

    【讨论】:

    • 我们想要返回 None 而不是 False 如果没有什么比这更大
    • 问题在于函数没有返回任何内容,所以我认为布尔值或某种字符串作为指标比None@dan 更有用
    • 欢迎您 @Peymanmohsenikiasari 请注意,and 可以更改为 if else 语句,如果您想返回 None 或特定字符串,这将更容易。否则,如果 False 工作,这很干净和简单
    • first_greater(df, 6, 'col1') 2 怎么样?应该是 5 吧?
    • 我遵循 OP 逻辑,这就是为什么我使用 ge("greater or equal") @SH-SF
    【解决方案2】:
    s = pd.Series([1, -5, 6, 4, -7, 12, -2, 0, -3])
    
    def first_greater(n):
        condition = (s >= n)
        if condition.any():
            return condition.idxmax()
        else:
            return None
    

    【讨论】:

      【解决方案3】:

      我知道你已经有了答案。但只是另一种展示可能性的方法

      def fg(n):
      try:
          a = df.loc[df.col1.ge(n)].index[0]
          return a
      except:
          print('None')
      

      【讨论】:

      • 谢谢。但我认为调用异常会使您的进程变慢。
      • 同意。我只是在尝试一些东西并找到了这种方法。由于我自己正在学习熊猫,所以想到了分享。就是这样。
      猜你喜欢
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 2020-07-26
      • 2023-03-26
      • 2016-11-22
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      相关资源
      最近更新 更多