Python 百分比差异计算

Python 百分比差异计算,python,pandas,dataframe,Python,Pandas,Dataframe,我有下面的数据框。第一列是YYYY-MM-DD格式的日期。它有逐月数据,但月份开始不一定是第一个月,最后一个月不一定是31或30个月,而不是29或28个月(如2月)。它可能会有所不同。例如,2020年2月只有2020-02-03的数据,而2月的最后可用数据是2020-02-28(不是第29个) 我的目标是创建一个新列,用于计算dataframe中上月最后一个可用日期的结束值与dataframe中下个月最后一个可用日期的结束值之间的百分比差。除当月最后一个可用日期外,所有日期的值都应为0。对于20

我有下面的数据框。第一列是YYYY-MM-DD格式的日期。它有逐月数据,但月份开始不一定是第一个月,最后一个月不一定是31或30个月,而不是29或28个月(如2月)。它可能会有所不同。例如,2020年2月只有2020-02-03的数据,而2月的最后可用数据是2020-02-28(不是第29个)

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

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


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

使用
转换检查
使用
复制检查

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'))

伟大的它工作得很好。但在我的问题中有一个细微的变化-不是比较该月第一个日期的开始值和最后一个可用日期的结束值,而是可以得到上个月最后一个可用日期结束值和当前月份最后一个可用日期结束值之间的百分比差吗?
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       
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'))