【问题标题】:Pandas groupby value and get value of max date and min datePandas groupby 值并获取最大日期和最小日期的值
【发布时间】:2021-12-15 17:52:05
【问题描述】:

我有一个 pandas DataFrame df 看起来像这样:

item year value
A    2010  20
A    2011  25
A    2012  32
B    2016  20
B    2019  40
B    2018  50

我的目标是能够为每个项目计算每个日期之间的价值差异。然后例如,我想为项目 A 找到:12(32 -20,因为最大年份是 2012,最小年份是 2010)和项目 B:20(40 - 20,因为最大年份是 2019,最小年份是 2016) .

我使用以下代码为每个项目获取最大年份和最小年份:

df.groupby("item").agg({'year':[np.min, np.max]})

然后,我找到每个项目的最小年份和最大年份。但是,我坚持做我想要的。

【问题讨论】:

  • 啊。对应于最大年份和最小年份的值之间的差异。这有点不清楚。

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


【解决方案1】:

在 agg 中使用 loc 访问器来计算价值差异,您还可以将项目中的第一年和最后一年连接起来,以明确指示范围。

df.sort_values(by=['item','year']).groupby('item').agg( year=('year', lambda x: str(x.iloc[0]) +'-'+str(x.iloc[-1])),value=('value', lambda x: x.iloc[-1]-x.iloc[0]))



      year    value
item                  
A     2010-2012     12
B     2016-2019     20

【讨论】:

    【解决方案2】:

    通过year 尝试sort_values,然后您可以groupby 并选择firstminlastmax

    g = df.sort_values('year').groupby('item')
    out = g['value'].last() - g['value'].first()
    

    输出:

    item
    A    12
    B    20
    Name: value, dtype: int64
    

    【讨论】:

      【解决方案3】:

      用途:

      def fun(x):
          return x[x.index.max()] - x[x.index.min()]
      
      
      res = df.set_index("year").groupby("item").agg(fun)
      print(res)
      

      输出

            value
      item       
      A        12
      B        20
      

      【讨论】:

        猜你喜欢
        • 2019-05-31
        • 2014-09-21
        • 1970-01-01
        • 2021-05-30
        • 1970-01-01
        • 1970-01-01
        • 2019-11-13
        • 2013-04-01
        • 2020-06-20
        相关资源
        最近更新 更多