【问题标题】:use pandas to get 3 years average in the same row使用 pandas 在同一行中获得 3 年平均值
【发布时间】:2021-01-30 15:14:47
【问题描述】:

我有一张来自不同公司的销售表。

company_name sales  year
    A         200   2019
    A         100   2018
    A         30    2017
    A         20    2016
    A         18    2015
    B         15    2019
    B         30    2018
    B         45    2017
    B         120   2016
    B         100   2015

现在,我想在同一行添加上一年的销售额。如何获得?

company_name sales  year   past_3_years_average
    A         200   2019       110
    A         100   2018       50
    A         30    2017       20        
    A         20    2016       Nan
    A         10    2015       Nan
    B         15    2019       30
    B         30    2018       66.6
    B         45    2017       90
    B         125   2016       Nan 
    B         100   2015       Nan

【问题讨论】:

  • A 2015 的数据发生变化。 B 2017 的输入是 18 v/s 输出也是 10,平均值不是 90。(45+125+100)/3 = 88.33 你能告诉我它们是真实数字还是虚构数字吗
  • 对不起我的意思是输入(45+120+100)/3 = 88.33

标签: python pandas dataframe time-series


【解决方案1】:

让我们尝试滚动

df['past_3_years_average'] = df.sort_values(['company_name','year']).groupby('company_name').sales.rolling(3).mean().reset_index(level=0,drop=True)

df
Out[106]: 
  company_name  sales  year  past_3_years_average
0            A    200  2019            110.000000
1            A    100  2018             50.000000
2            A     30  2017             20.000000
3            A     20  2016                   NaN
4            A     10  2015                   NaN
5            B     15  2019             30.000000
6            B     30  2018             66.666667
7            B     45  2017             90.000000
8            B    125  2016                   NaN
9            B    100  2015                   NaN

【讨论】:

    猜你喜欢
    • 2019-09-04
    • 2020-11-14
    • 2022-08-14
    • 2015-04-03
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多