首页 > 解决方案 > 如何使用数据框计算每小时的某些值

问题描述

我是 python 和 pandas 库的新手,我需要帮助解决这个问题。

我有一个看起来像这样的数据框:

          timestamp       battery_level
0   2017-10-09 15:33:09   0.37
1   2017-10-09 15:36:17   0.38
2   2017-10-09 15:36:27   0.37
3   2017-10-09 15:38:08   0.38
4   2017-10-09 15:42:39   0.39
5   2017-10-09 15:45:30   0.40
6   2017-10-09 15:48:41   0.41
7   2017-10-09 15:51:52   0.42
8   2017-10-09 15:54:53   0.43
9   2017-10-09 15:57:54   0.44
10  2017-10-09 16:00:55   0.45
11  2017-10-09 16:05:47   0.46
12  2017-10-09 16:08:58   0.47
13  2017-10-09 16:12:09   0.48
14  2017-10-09 16:15:20   0.49
15  2017-10-09 16:18:11   0.50

我如何计算每小时的时间戳差异和电池电量?

在这种情况下,我想得到这样的东西:

            timestamp_diff  battery_diff
15:00:00    00:24:45        0.07
16:00:00    00:17:26        0.05

标签: pythonpandas

解决方案


使用groupbyby hours 或floor用于带有diffand的日期sum时间,重命名是为了避免在 之后使用相同的列名reset_index

#if necessary convert to datetimes
df['timestamp'] = pd.to_datetime(df['timestamp'])

df = df.groupby(df['timestamp'].dt.hour.rename('date')).apply(lambda x: x.diff().sum())
print (df)
     timestamp  battery_level
date                         
15    00:24:45           0.07
16    00:17:26           0.05

df = df.groupby(df['timestamp'].dt.floor('H').rename('date')).apply(lambda x: x.diff().sum())
print (df)
                    timestamp  battery_level
date                                        
2017-10-09 15:00:00  00:24:45           0.07
2017-10-09 16:00:00  00:17:26           0.05
df = df.reset_index()
print (df)
                 date timestamp  battery_level
0 2017-10-09 15:00:00  00:24:45           0.07
1 2017-10-09 16:00:00  00:17:26           0.05

推荐阅读