什么是熊猫时间戳时间戳计算?

时间:2020-03-16 18:33:01

标签: pandas time-series

我有以下数据集

df = pd.DataFrame({'timestamp': pd.date_range('1/1/2020', '3/1/2020 23:59', freq='12h'), 
                   'col1': np.random.randint(100,size=122)}).\
                  sort_values('timestamp')

我想计算col1的每日,每周和每月总和。如果我在timestamp列中使用'W'粒度,则会收到ValueError:ValueError: <Week: weekday=6> is a non-fixed frequency,我读到建议使用7D30D等。
我的问题是大熊猫如何计算7D30D的粒度?如果我添加另一列

df['timestamp2']= df.timestamp.dt.floor('30D')
df.groupby('timestamp2')[['col1']].sum()

我得到以下结果:

timestamp2  col1   
2019-12-10  778    
2020-01-09  3100    
2020-02-08  2470   

如果我的最小日期是2020年1月1日且最大时间戳是2020年3月1日,为什么熊猫会返回这些日期?

1 个答案:

答案 0 :(得分:1)

origin是POSIX的起源: 1970-01-01 。通过使用.floor('30D'),允许值为1970-01-01、1970-01-31,...和所有其他30天倍数。您的日期接近第608-610倍。

pd.to_datetime('1970-01-01') + pd.DateOffset(days=30*608)
#Timestamp('2019-12-10 00:00:00')

pd.to_datetime('1970-01-01') + pd.DateOffset(days=30*609)
#Timestamp('2020-01-09 00:00:00')

如果您想要的是距初次观察30天的时间,那么resample是汇总方式:

df.resample('30D', on='timestamp')['timestamp'].agg(['min', 'max'])

                  min                 max
timestamp                                
2020-01-01 2020-01-01 2020-01-30 12:00:00    # starts from 1st date
2020-01-31 2020-01-31 2020-02-29 12:00:00
2020-03-01 2020-03-01 2020-03-01 12:00:00