【问题标题】:Pandas percentage difference Calculation熊猫百分比差异计算
【发布时间】:2021-01-05 10:52:56
【问题描述】:

我有以下 Pandas 数据框。第一列是 YYYY-MM-DD 格式的日期。它有逐月数据,但月份开始可能不一定是第一个月,最后一个月可能不一定是 31 或 30,也不一定是 29 或 28,以防 2 月。它可能会有所不同。例如,2020 年 2 月只有 2020 年 2 月 3 日的数据,而 2 月的最后可用数据是 2020 年 2 月 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 年 1 月 1 日的终值与 2020 年 1 月 31 日的终值之间的百分比差异。 其余部分(例如从 2020 年 2 月开始:百分比差异是在 2020 年 1 月 31 日的最终值和 2020 年 2 月 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 中实现这一点?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

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

    【讨论】:

    • 太棒了。它工作得很好。但是我的问题有一个细微的变化-不是比较当月第一个日期的开始值和该月最后一个可用日期的结束值,而是可以获得上个月的最后一个可用日期结束值和当前日期之间的百分比差异月最后一个可用日期结束值?
    猜你喜欢
    • 2022-11-29
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2020-09-21
    • 2022-11-19
    • 1970-01-01
    相关资源
    最近更新 更多