python - 使用 pandas 分别查找每天连续时间戳之间的差异

标签 python pandas datetime dataframe group-by

我有一个带有日期时间索引的数据框:

>>> d.head()
Out[29]: 
                         Value 
Time                                                                                                  
2017-04-02 21:11:00.221  1114.73   
2017-04-03 00:01:00.221  1114.73 
2017-04-03 00:01:01.345  1114.73 
2017-04-03 00:01:02.701  1114.10  

我想获得索引时间的连续差异,但每天都是分开的。我目前正在做的事情还不完整:

d['datetime']= d.index
d['datetime_diff']=d['datetime'].diff()

这给了我连续索引时间戳之间的差异,但它不会每天重新开始。我可以将日期与日期时间分开,对日期进行分组并计算每个日期的时间差异。每天没有固定的第一次和最后一次。

获得这些时间差后,我打算获取平均值、中位数、计数等统计数据。

有更好的方法吗?我想这会减少到每天标记第一个值的不同问题。现在,我可以使用 group-by 轻松获取每天的第一个值,但这并不能解决问题,因为我需要一种简单的方法来标记第一个值,而不是检索第一个值。

最佳答案

使用pd.TimeGrouper,并按1D的频率进行分组

diff = df.groupby(pd.TimeGrouper(freq='1D')).diff()
diff

                         Value
Time                          
2017-04-02 21:11:00.221    NaN
2017-04-03 00:01:00.221    NaN
2017-04-03 00:01:01.345   0.00
2017-04-03 00:01:02.701  -0.63

如果df.Time不是DateTime类型,您需要将其转换:

df.index = pd.to_datetime(df.index)
<小时/>

获取索引的差异,有一种更简单的方法 - 首先reset_index,然后groupby并调用。仅在该列上进行 diff 。您还可以将 pd.Grouperkey=Time 结合使用来实现此目的。

diff = df.reset_index().groupby(pd.Grouper(key='Time', freq='1D')).Time.diff()
diff

0               NaT
1               NaT
2   00:00:01.124000
3   00:00:01.356000
Name: Time, dtype: timedelta64[ns]
<小时/>

顺便说一句,如果您对每日统计数据感兴趣,您可以 groupby 并调用 .describe:

g = df.groupby(pd.Grouper(level=0, freq='1D'))
g.describe()

           Value                                                          \
           count     mean       std      min       25%      50%      75%   
Time                                                                       
2017-04-02   1.0  1114.73       NaN  1114.73  1114.730  1114.73  1114.73   
2017-04-03   3.0  1114.52  0.363731  1114.10  1114.415  1114.73  1114.73   


                max  
Time                 
2017-04-02  1114.73  
2017-04-03  1114.73 

关于python - 使用 pandas 分别查找每天连续时间戳之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46147230/

相关文章:

python - reST 中是否需要 3 个空格缩进?

python - 在谷歌colab中导入自定义库时出现问题

python - Pandas scatter_matrix 中的类标签

sqlite - 获取 SQLite 中最新时间戳的记录

c# - 使用 C# 解析 DateTime

mysql - MySQL 可以自动删除 DATETIME 早于 _ 的行吗?

python - Argparse 无法识别唯一的位置参数

python - 在 PyMC 2.3 中创建随机装饰器

python - 通过两列的并集重新索引 pandas 数据框

pandas - 使用 If-else 更改 Pandas 中的值