【问题标题】:Dataframe column filter from a list of tuples来自元组列表的数据框列过滤器
【发布时间】:2020-04-16 17:17:00
【问题描述】:

我正在尝试创建一个函数来从元组列表中过滤数据框。我已经创建了以下函数,但它似乎没有工作。 元组列表将具有数据框列名称,以及要过滤的最小值和最大值。

例如:

eg_tuple = [('colname1', 10, 20), ('colname2', 30, 40), ('colname3', 50, 60)]

我尝试的功能如下:

def col_cut(df, cutoffs):
    for c in cutoffs:
        df_filter = df[ (df[c[0]] >= c[1]) & (df[c[0]] <= c[2])]
    return df_filter

请注意,该函数不应过滤值等于最大值或最小值的行。感谢您的帮助。

【问题讨论】:

    标签: pandas list dataframe filter tuples


    【解决方案1】:

    list comprehension 创建的所有掩码中的np.logical_and + reduceSeries.between 一起使用:

    def col_cut(df, cutoffs):
        mask = np.logical_and.reduce([df[col].between(min1,max1) for col,min1,max1 in cutoffs])
        return df[mask]
    

    【讨论】:

      【解决方案2】:

      问题是您每次都以df 作为过滤源。你应该过滤:

      def col_cut(df, cutoffs):
          df_filter = df
          for col, mn, mx in cutoffs:
              dfcol = df_filter[col]
              df_filter = df_filter[(dfcol >= mn) & (dfcol <= mx)]
          return df_filter

      请注意,您可以在此处使用.between(..) [pandas-doc]

      def col_cut(df, cutoffs):
          df_filter = df
          for col, mn, mx in cutoffs:
              df_filter = df_filter[df_filter[col].between(mn, mx)]
          return df_filter

      【讨论】:

      • 非常感谢威廉。这完全符合预期。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 2020-04-13
      • 2023-01-17
      • 2019-05-21
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多