我有一个熊猫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]})
然后,我找到每个项目的年份最小值和年份最大值。然而,我坚持做我想要的。
在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
使用:
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
尝试按<代码>年份<代码>对值进行排序,然后您可以按<代码>分组<代码>并为<代码>最小值选择<代码>第一个<代码>为<代码>最大值选择<代码>最后一个<代码>:
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中。 诸如此类的东西…您就知道了如果您想获得今天之前的最新信息: