【问题标题】:Calculating growth factor in python在python中计算生长因子
【发布时间】:2020-08-12 12:07:17
【问题描述】:

我有以下数据框

Date           Country  Sales
01/02/20        France   1000
01/02/20        Germany  1000
02/02/20        France   2000
02/02/20        Germany  3000
03/02/20        France   4500
03/02/20        Germany  5000

我想按国家/地区计算每天的增长因子。例如,德国在 2020 年 2 月 2 日 = 3000/1000 和 2020 年 3 月 2 日的增长因子应该是 5000/3000。不寻找百分比变化。

【问题讨论】:

  • 您的预期输出是什么?
  • 我的预期输出是结果因子,例如 Germany on 02/02/20 =3 (3000/1000)
  • 德国01/02/20的增长因子呢?

标签: python group-by


【解决方案1】:
df = pd.DataFrame([
['01/02/20',        'France '  ,1000],
['01/02/20',        'Germany'  ,1000],
['02/02/20',        'France '  ,2000],
['02/02/20',        'Germany'  ,3000],
['03/02/20',        'France '  ,4500],
['03/02/20',        'Germany'  ,5000]
], columns=['Date', 'Country', 'Sales'])
df['Diff'] = df.groupby(['Country']).diff()
df['Growth'] = df.eval('Sales/(Sales - Diff)')
print(df)

另一种选择如上。

       Date  Country  Sales    Diff    Growth
0  01/02/20  France    1000     NaN       NaN
1  01/02/20  Germany   1000     NaN       NaN
2  02/02/20  France    2000  1000.0  2.000000
3  02/02/20  Germany   3000  2000.0  3.000000
4  03/02/20  France    4500  2500.0  2.250000
5  03/02/20  Germany   5000  2000.0  1.666667

【讨论】:

    【解决方案2】:

    首先按国家/地区排序:df = df.sort_values(['Country'])

    然后设置一个过滤器,它只在索引与前一个索引相同时返回 true(即它们属于同一个国家): filter = df['Country'] == df['Country'].shift(1)

    现在计算上述过滤器为真的最后一点的分数变化:

    df['Growth'] = df['Sales'].where(filter)/df['Sales'].shift(1)

    最后通过索引来解决:

    df = df.sort_index()

    结果:

           Date  Country  Sales     Growth
    0  01/02/20   France   1000         NaN
    1  01/02/20  Germany   1000         NaN
    2  02/02/20   France   2000    2.000000
    3  02/02/20  Germany   3000    3.000000
    4  03/02/20   France   4500    2.250000
    5  03/02/20  Germany   5000    1.666667
    

    【讨论】:

      【解决方案3】:

      用途:

      df["Growth Factor"] = df.groupby(
          "Country")["Sales"].transform(lambda g: g / g.shift())
      print(df)
      

      打印出来:

             Date  Country  Sales  Growth Factor
      0  01/02/20   France   1000            NaN
      1  01/02/20  Germany   1000            NaN
      2  02/02/20   France   2000       2.000000
      3  02/02/20  Germany   3000       3.000000
      4  03/02/20   France   4500       2.250000
      5  03/02/20  Germany   5000       1.666667
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-23
        • 2013-03-05
        • 2018-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多