【问题标题】:Pandas: TimeGrouper frequency mismatchPandas:TimeGrouper 频率不匹配
【发布时间】:2013-06-03 22:24:51
【问题描述】:

我有以下数据框:

df = pd.DataFrame({
'Buyer': 'Carl Mark Carl Joe Joe Carl'.split(),
'Quantity': [1,3,5,8,9,3],
'Date' : [
    DT.datetime(2013,9,1,13,0),
    DT.datetime(2013,9,1,13,5),
    DT.datetime(2013,10,1,20,0),
    DT.datetime(2013,10,3,10,0),
    DT.datetime(2013,12,2,12,0),                                      
    DT.datetime(2013,12,2,14,0),
    ]})

df = df.set_index('Date', drop=False)

具有以下功能:

def f(frame):
    cum_sum = 0
    if (len(frame) > 0):
        cum_sum = frame.Quantity.sum()
    frame['cum_sum'] = cum_sum
    return frame

x1 = df.groupby(pd.TimeGrouper('20M')).apply(f)

我得到了输出

                     Buyer                Date  Quantity  cum_sum
Date                                                                  
2013-09-01 13:00:00  Carl 2013-09-01 13:00:00         1       4
2013-09-01 13:05:00  Mark 2013-09-01 13:05:00         3       4    
2013-10-01 20:00:00  Carl 2013-10-01 20:00:00         5      25
2013-10-03 10:00:00  Joe  2013-10-03 10:00:00         8      25
2013-12-02 12:00:00  Joe  2013-12-02 12:00:00         9      25
2013-12-02 14:00:00  Carl 2013-12-02 14:00:00         3      25

前两行的 cum_sum 怎么可能不是 25?如果我在 TimeGrouper 函数中使用“A”作为年度量词,那么前两行的 cum_sum 计算是否正确?

谢谢

安迪

【问题讨论】:

  • 您的代码示例似乎缺少信息/数据/代码:例如,您的 df 中没有分支数据。运行您提供的代码示例不会得到与您相同的结果。可以修改吗?
  • 嗨,Boud,很抱歉出现了一些复制粘贴问题。我更新了代码。

标签: python group-by pandas


【解决方案1】:

您需要将closed='left' 添加到时间分组中,否则它不会包含第一个bin(因此它在不同的组中), 顺便说一句...你的函数中的错字:cum_sum 不是sum_sum

(Pdb) df.groupby(TimeGrouper('20M',closed='left')).apply(f)
                    Buyer                Date  Quantity  cum_sum
Date                                                            
2013-09-01 13:00:00  Carl 2013-09-01 13:00:00         1       29
2013-09-01 13:05:00  Mark 2013-09-01 13:05:00         3       29
2013-10-01 20:00:00  Carl 2013-10-01 20:00:00         5       29
2013-10-03 10:00:00   Joe 2013-10-03 10:00:00         8       29
2013-12-02 12:00:00   Joe 2013-12-02 12:00:00         9       29
2013-12-02 14:00:00  Carl 2013-12-02 14:00:00         3       29

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    相关资源
    最近更新 更多