查找不考虑日期顺序的百分比增加和差异(在Python中)
我有一个数据集df,我希望在其中计算特定组的总和在一段时间内的增长百分比。以下是数据集:查找不考虑日期顺序的百分比增加和差异(在Python中),python,pandas,numpy,Python,Pandas,Numpy,我有一个数据集df,我希望在其中计算特定组的总和在一段时间内的增长百分比。以下是数据集: date size type 1/1/2020 3 a 1/1/2020 13 b 1/1/2020 1 c 2/1/2020 51 a 2/1/2019 10
date size type
1/1/2020 3 a
1/1/2020 13 b
1/1/2020 1 c
2/1/2020 51 a
2/1/2019 10 b
期望输出
然后找到百分比差异和最早日期的差异
date diff percentdiff type
2/1/2020 48 1600 a
1/1/2020 3 30 b
1/1/2020 0 0 c
我们看到a组从3增加到51,(从2020年1月1日增加到2020年2月1日),这使我们的差异48,差异的百分比为1600%
c组为0,因为没有变化。
这就是我尝试过的:
df1 = df.groupby(['type','date'])['size'].agg(lambda x:
(x.iloc[-1]/x.iloc[0]-1)*100).to_frame('increase')
df1['diff'] = df.groupby(['type','date']).agg(lambda x:x.iloc[-1]-x.iloc[0])
我还在研究这个。欢迎提出任何建议。可能有一个更简洁的解决方案,但这是可行的:
df['date'] = pd.to_datetime(df['date'])
grouped = df.sort_values('date').groupby(['type'])
output = pd.DataFrame({
'date': grouped['date'].agg(lambda x: x.iloc[-1]).values,
'diff': grouped['size'].agg(lambda x: x.diff().fillna(0).iloc[-1]).values,
'percentdiff': grouped['size'].agg(lambda x: x.pct_change().fillna(0).iloc[-1] * 100).values,
'type': grouped['type'].agg(lambda x: x.iloc[0]).values
})
为什么期望输出中的日期是
1/1/2020
对于b
和2/1/2020
对于a
?首先使用groupy
,然后使用GrouBy.agg
和pct\u更改
使用最新的日期戳最早的日期是2020年1月1日,然后在2020年2月1日结束“b”开始2019年2月1日至2020年1月1日在Ch3steR group by date结束,然后是groupby.agg type,然后执行差异和pct更改?我相信。让我研究一下。非常感谢。177.777%
和26.0869%
是如何计算的?ok@Ghilas感谢您发布这篇文章。我将尝试这个,并以此为基础构建。您是如何做到的,以便代码能够以最早的日期生成的?我想知道你做了什么?谢谢@ghilas@Lynnette这是.sort_值('date')
然后分组['date'].agg(lambda x:x.iloc[-1])
df['date'] = pd.to_datetime(df['date'])
grouped = df.sort_values('date').groupby(['type'])
output = pd.DataFrame({
'date': grouped['date'].agg(lambda x: x.iloc[-1]).values,
'diff': grouped['size'].agg(lambda x: x.diff().fillna(0).iloc[-1]).values,
'percentdiff': grouped['size'].agg(lambda x: x.pct_change().fillna(0).iloc[-1] * 100).values,
'type': grouped['type'].agg(lambda x: x.iloc[0]).values
})