熊猫百分比差异计算

时间:2020-09-18 13:32:13

标签: python pandas dataframe

我有下面的Pandas数据框。第一列是YYYY-MM-DD格式的日期。它具有按月数据,但是如果2月是2月,则开始的月不一定是1号,最后一个月的不一定是31号或30号,也不是29号或28号。可能会有所不同。例如,2020年2月的数据仅来自2020-02-03,而2月的最后可用数据是2020-02-28(而非29日)。

Date       start_Value end_value
2020-01-01 115         120
2020-01-02 122         125
2020-01-03 125.2       126
...
2020-01-31 132         135
2020-02-03 135.5       137
2020-02-04 137.8       138
...
2020-02-28 144         145   

我的目标是创建一个新列,该列计算数据框中上个月最后一个可用日期的结束值与数据框中下个月最后一个可用日期的结束值之间的百分比差。除该月的最后可用日期外,所有日期均应为0。对于2020年1月,由于我们没有上个月的数据,因此应使用该月的第一个可用日期的终值来计算百分比差异。

对于2020年1月,将计算2020-01-01最终值与2020-01-31最终值之间的百分比差。 对于其余部分(例如,从2020年2月开始:计算2020-01-31的最终值与2020-02-28的最终值之间的百分比差)。

Date       start_Value end_value percentage difference
2020-01-01 115         120       0
2020-01-02 122         125       0
2020-01-03 125.2       126       0
...
2020-01-31 132         135       17.4
2020-02-03 135.5       137       0
2020-02-04 137.8       138       0
...
2020-02-28 144         145       7.41       

如何在python和pandas中实现这一目标?

1 个答案:

答案 0 :(得分:3)

通过transformduplicated进行检查

s = df.Date.dt.strftime('%Y-%m')
df['pct']= (df.groupby(s)['end_value'].transform('last')/df.groupby(s)['start_Value'].transform('first')-1).\
              mask(s.duplicated(keep='last'))