当前位置: 首页 > 知识库问答 >
问题:

按值分组并获取最大日期和最小日期的值

司空默
2023-03-14

我有一个熊猫DataFramedf看起来像这样:

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]})

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

共有3个答案

琴刚豪
2023-03-14

在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
邵弘义
2023-03-14

使用:

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
湛光明
2023-03-14

尝试按<代码>年份<代码>对值进行排序,然后您可以按<代码>分组<代码>并为<代码>最小值选择<代码>第一个<代码>为<代码>最大值选择<代码>最后一个<代码>:

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

输出:

item
A    12
B    20
Name: value, dtype: int64
 类似资料:
  • 问题内容: 我想知道哪个是Javascript 对象允许的最小和最大日期。我发现最小日期大约是200000 BC,但是我没有得到任何参考。 有人知道答案吗?我只是希望它不依赖于浏览器。 最好以“纪元时间”(= 1970-01-01 00:00:00 UTC + 00的毫秒数)回答。 问题答案: 根据规范§15.9.1.1: Date对象包含一个数字,该数字指示毫秒内的特定时间点。这样的数字称为时间

  • 初始数据: 使用此查询: 我得到: 但我需要分组“quotite”时,下一行是相同的,并显示第一行的开始日期和最后一行的日期。 预期结果: gordon提供的解决方案: 选择agenhi,tacthi,min(dtfihi)作为start_date,lead(max(dtfihi))over(按agenhi分区,seqnum-seqnum_2按max(dtfihi)排序)作为end_date,fr

  • 问题内容: 我有一个具有project_id int,update_date datetime和update_text varchar(max)的SQL Server表 该表的每个project_id都有许多更新。我需要通过update_date获取所有project_id值的最新信息。 例子: 该查询应获得: 问题答案: 使用 与 extrester演示:http://rextester.com

  • 在SQL中,如何按查询分组获取计数中的最小/最大日期? 查询: --这并没有给出文件的最小和最大接收日期 预期输出...与SourceId、Count、StartDate(最小值)、EndDate(最大值)一起

  • 问题内容: 我知道这在这里被问了很多,而且我尝试使用其他示例并入我自己的示例,但是我似乎无法完成这项工作。 我有sku,日期和费用列,我想查看所有3列,但仅按最大日期(按sku分组)查看。目前: 需要: 这是我的SQL的样子: 这是设计视图的外观(我更是一个视觉化的人): 设计视图 这是第二周的自学,如何操作Access以及它如何工作,所以如果我们能用蜡笔画出如何正确完成此工作的方法,那就太好了。

  • 问题内容: 我下面有日期数组 并想知道 最近的日期, 例如:最接近今天的日期。 我怎样才能做到这一点? 问题答案: 循环执行,将值转换为日期,然后将最新的值存储在var中。 诸如此类的东西…您就知道了如果您想获得今天之前的最新信息: