【问题标题】:Python repeatable cycle for picking only first values equal 1Python 可重复循环仅选择等于 1 的第一个值
【发布时间】:2022-01-22 03:51:43
【问题描述】:

我的 df 索引的日期和值为 0 或 1。我需要从该数据框中过滤每个前 1。 例如:

2019-11-27    0
2019-11-29    0
2019-12-02    0
2019-12-03    1
2019-12-04    1
2019-12-05    1
2020-06-01    0
2020-06-02    0
2020-06-03    1
2020-06-04    1
2020-06-05    1

所以我想得到:

2019-12-03    1
2020-06-03    1

【问题讨论】:

  • 请在提问前尝试一下(并在问题中提供)

标签: python dataframe time-series analytics


【解决方案1】:

假设您想要按日期升序排序的数据框的值为 1 的第一个日期,则窗口操作可能是执行此操作的最佳方法:

df['PrevValue'] = df['value'].rolling(2).agg(lambda rowset: int(rowset.iloc[0]))

这行代码向数据框中添加了一个名为“PrevValue”的额外列,其中包含前一行的值或第一行的“NaN”。

接下来,您可以按如下方式查询数据:

df_filtered = df.query("value == 1 & PrevValue == 0")

导致以下输出:

          date  value  PrevValue
3   2019-12-03      1        0.0
8   2020-06-03      1        0.0

【讨论】:

    【解决方案2】:

    我构建的功能可以满足您的要求

    重要提示您应该更改可能导致问题的 col 参数

      def funfun (df , col="values"):
      '''
      df : dataframe 
      col (str) : please insert the name of column that you want to scan 
      '''
      a = []
      c = df.to_dict()
      for i in range (len(c[col]) -1 ) : 
        b=c[col][i] , c[col][i+1]
        if b == (0, 1) : 
          a.append(df.iloc[i+1])
      return a 
    

    结果

    【讨论】:

    • 谢谢,您的代码有效。
    • 不客气!!
    猜你喜欢
    • 2017-11-21
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 2016-07-12
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    相关资源
    最近更新 更多