【问题标题】:Obtain First Entry for Each Month/Year Pair获得每个月/年对的第一个条目
【发布时间】:2020-09-25 18:01:40
【问题描述】:

我希望获得每个月/年对的第一个条目。我正在考虑构建一个 groupby 方法,但我不确定考虑到优先顺序会如何发挥作用。

     Date   Seconds
    2020-05 2748.03 
    2020-05 2748.25 
    2020-05 2777.72 
    ... ... ... ... 
    1997-12 100.22 
    1997-12  66.66
    1997-11  54.53
    1997-11  92.11
    1997-11  42.52
    1997-10 155.22  
    1997-10 115.03  

谢谢!

【问题讨论】:

    标签: python-3.x pandas datetime pandas-groupby


    【解决方案1】:

    这是groupby().head

    # change `date` to your year/month column name
    df.groupby('date', sort=False).head(1)
    

    drop_duplicates:

    df.drop_duplicates('date')
    

    输出:

          date    Value
    0  2020-05  2748.03
    3  1997-10   112.67
    

    【讨论】:

      【解决方案2】:

      我会假设这是一个字符串列表,如下所示:

      dates = [
          "2020-05 2748.03",
          ...
          "1997-10 115.03"
      ]
      

      为了按年分组,您首先需要将日期拆分为年月列和秒列,如下所示:

      dates = [single_date.split(" ") for single_date in dates]
      

      日期列表现在:

      [
          ["2020-05", "2748.03"],
          ...
          ["1997-10", "115.03"],
      ]
      

      现在您应该构建数据框:

      df = pd.DataFrame(dates, columns =['year_month', 'seconds'], dtype = float)
      

      现在让 groupby year_month 取秒列中的最小值

      first_entries_per_month_year = df.groupby("year_month").min()
      

      希望有所帮助

      【讨论】:

      • 别忘了点赞让其他人也能看到
      • 我意识到您实际上使用“秒”列作为排序的代理,但该数据的最小值不一定对应于第一个条目。我更新了信息以反映这一点。我还没有声望投票,但一旦我到达那里就会这样做!
      猜你喜欢
      • 1970-01-01
      • 2020-12-08
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多