【问题标题】:Fill values in pandas data frame to make dataframe contiguous在熊猫数据框中填充值以使数据框连续
【发布时间】:2016-02-11 04:44:53
【问题描述】:

我有一个表单的数据框

   day  hour  variantid    eventType    counts
0   8   14    variantid1    clicked     63
1   8   14    variantid1    served      5783
2   8   14    variantid2    clicked     28
3   8   14    variantid2    served      4919
4   8   15    variantid2    served      268

现在,由于variantid215 当天variantid2'clicked' 事件没有对应的值,因此我很难正确绘制值。如何在此数据帧上使用fillna 之类的方法将行day=8 , hour=15 variantid=variantid2 eventType=clicked 显式添加到count=0? (我只是猜测我们会使用fillna)。

我不太确定该怎么做?

还跟进这个问题,我如何将counts 字段中的值更改为一个汇总数字,其中包括到目前为止发生的所有事件?

所以上面的dataframe会变成:

   day  hour    variantid    eventType  counts
0   8   14      variantid1   clicked    63
1   8   14      variantid1   served     5783
2   8   14      variantid2   clicked    28
3   8   14      variantid2   served     4919
4   8   15      variantid2   served     5187   # 4919 + 268

【问题讨论】:

    标签: python pandas dataframe time-series


    【解决方案1】:

    关于第二个问题(顺便说一句,每个帖子应该只有一个),诀窍是将您的时间列作为索引,然后将所有内容作为 MultiIndex 列取消堆叠。然后您可以轻松地执行cumsum

    df2 = (pd.DataFrame(df.groupby(['day', 'hour', 'variantid', 'eventType']).counts.sum())
           .unstack(['variantid', 'eventType']))
    >>> df2 
                  counts                         
    variantid variantid1        variantid2       
    eventType    clicked served    clicked served
    day hour                                     
    8   14            63   5783         28   4919
        15           NaN    NaN        NaN    268
    
    >>> df2.cumsum()
                  counts                         
    variantid variantid1        variantid2       
    eventType    clicked served    clicked served
    day hour                                     
    8   14            63   5783         28   4919
        15           NaN    NaN        NaN   5187
    

    说实话,我不确定您在第一个问题中的意思。也许你想把这个数据框,fillna(0) 放在结果上,然后把它堆叠回去?

    >>> df2.cumsum().fillna(0).stack(['variantid', 'eventType'])
                                   counts
    day hour variantid  eventType        
    8   14   variantid1 clicked        63
                        served       5783
             variantid2 clicked        28
                        served       4919
        15   variantid1 clicked         0
                        served          0
             variantid2 clicked         0
                        served       5187
    

    【讨论】:

      猜你喜欢
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 2020-06-06
      • 2016-12-11
      • 2018-12-19
      • 1970-01-01
      • 2019-01-05
      相关资源
      最近更新 更多