【问题标题】:Calculating cumulative product over a dataframe with unique id's计算具有唯一 ID 的数据帧上的累积产品
【发布时间】:2019-08-07 04:26:27
【问题描述】:

我想计算时间序列数据中每个日期和每个唯一 ID 的累积产品。我理解groupby 和cumprod 需要一起使用。但是,我不确定确切的语法。

这是一些示例数据和想要的输出

data = {'date': ['2014-05-01','2014-05-01','2014-05-01','2014-05-01',
     '2014-05-02','2014-05-02','2014-05-02','2014-05-02','2014-05-03',
     '2014-05-03','2014-05-03', '2014-05-03'],'id':[1, 2, 3, 4, 1,
     2, 3, 4, 1, 2, 3, 4],'obs': [1, 2, 3, 4, 4, 3, 2, 1, 1, 2, 3, 4]}

df = pd.DataFrame(data, columns = ['date', 'id','obs'])
df.index =df.date
del df['date']

df

            id   obs  
date               
2014-05-01   1    1    
2014-05-01   2    2    
2014-05-01   3    3    
2014-05-01   4    4    
2014-05-02   1    4    
2014-05-02   2    3    
2014-05-02   3    2    
2014-05-02   4    1    
2014-05-03   1    1    
2014-05-03   2    2    
2014-05-03   3    3    
2014-05-03   4    4    

根据 obs 列中的值创建名为 cumproduct 的新列

df

            id   obs  cumproduct
date               
2014-05-01   1    1    1
2014-05-01   2    2    2
2014-05-01   3    3    3
2014-05-01   4    4    4
2014-05-02   1    4    5
2014-05-02   2    3    5
2014-05-02   3    2    5
2014-05-02   4    1    5
2014-05-03   1    1    6
2014-05-03   2    2    7
2014-05-03   3    3    8
2014-05-03   4    4    9

任何帮助都会很棒:)

【问题讨论】:

    标签: python dataframe uniqueidentifier


    【解决方案1】:
    import pandas as pd
    
    data = {'date': ['2014-05-01', '2014-05-01', '2014-05-01', '2014-05-01',
                     '2014-05-02', '2014-05-02', '2014-05-02', '2014-05-03',
                     '2014-05-03', '2014-05-03'],
            'id': [1, 2, 3, 4, 1, 2, 3, 4, 1, 2],
            'obs': [1, 2, 3, 4, 5, 5, 5, 5, 6, 7]}
    
    df = pd.DataFrame(data).set_index(['date', 'id']).sort_index(level='date')
    df_cumprod = df.groupby('id').cumprod()
    print(df_cumprod)
    

    那么输出是:

                   obs
    date       id     
    2014-05-01 1     1
               2     2
               3     3
               4     4
    2014-05-02 1     5
               2    10
               3    15
    2014-05-03 4    20
               1    30
               2    70
    

    请注意,您提供的代码和数据在多个方面存在缺陷,请勿运行。

    【讨论】:

      猜你喜欢
      • 2021-07-21
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      相关资源
      最近更新 更多