代码之家  ›  专栏  ›  技术社区  ›  Jonas Palačionis

对带有日期戳的分组多索引数据帧使用pct\u更改

  •  0
  • Jonas Palačionis  · 技术社区  · 4 年前

    我有下面的数据帧 df

    datestamp       device      country     users
    2021-01-14      ipad        uk          10
    2021-01-14      iphone      uk          15
    2021-01-14      ipad        us          20
    2021-01-14      iphone      us          40
    2021-01-14      ipad        fr          100
    2021-01-14      iphone      fr          50
    2021-01-15      ipad        uk          20
    2021-01-15      iphone      uk          10
    2021-01-15      ipad        us          20
    2021-01-15      iphone      us          60
    2021-01-15      ipad        fr          300
    2021-01-15      iphone      fr          500
    

    我想知道 users datestamp device country

    df.groupby(['datestamp','country', 'device']).count().pct_change().reset_index()
    

    但它忽略了分组,只是逐行检查。

    datestamp       device      country     users       change
    2021-01-14      ipad        uk          10          np.nan
    2021-01-14      iphone      uk          15          np.nan
    2021-01-14      ipad        us          20          np.nan
    2021-01-14      iphone      us          40          np.nan
    2021-01-14      ipad        fr          100         np.nan
    2021-01-14      iphone      fr          50          np.nan
    2021-01-15      ipad        uk          20          100%
    2021-01-15      iphone      uk          10          -33%
    2021-01-15      ipad        us          20          0%
    2021-01-15      iphone      us          60          50%
    2021-01-15      ipad        fr          300         300%
    2021-01-15      iphone      fr          500         1000%
    
    1 回复  |  直到 4 年前
        1
  •  2
  •   akuiper    4 年前

    看起来你想要每个人的百分比变化 device country datestamp . 相反,你应该按 日期戳 装置 国家 :

    df['change'] = df.sort_values('datestamp') \
                     .groupby(['device', 'country']) \
                     .users \
                     .pct_change() \
                     .mul(100)
    
    df
    #     datestamp  device country  users      change
    #0   2021-01-14    ipad      uk     10         NaN
    #1   2021-01-14  iphone      uk     15         NaN
    #2   2021-01-14    ipad      us     20         NaN
    #3   2021-01-14  iphone      us     40         NaN
    #4   2021-01-14    ipad      fr    100         NaN
    #5   2021-01-14  iphone      fr     50         NaN
    #6   2021-01-15    ipad      uk     20  100.000000
    #7   2021-01-15  iphone      uk     10  -33.333333
    #8   2021-01-15    ipad      us     20    0.000000
    #9   2021-01-15  iphone      us     60   50.000000
    #10  2021-01-15    ipad      fr    300  200.000000
    #11  2021-01-15  iphone      fr    500  900.000000