在给定半小时粒度的情况下,如何以小时粒度累计值?

时间:2019-06-14 18:14:13

标签: python pandas

我有以下熊猫DataFrame df

DateTime              SENSOR   PROD
2019-04-01 00:00:00   0        0.0
2019-04-01 00:30:00   1        10.0
2019-04-01 01:00:00   1        5.0
2019-04-01 01:30:00   1        1.0
2019-04-01 02:00:00   1        12.0
2019-04-01 02:30:00   0        0.0

以半小时的粒度给出值。我应该按小时粒度总结PROD,以获得以下结果。

DateTime              PROD
2019-04-01 00:00:00   10.0
2019-04-01 01:00:00   6.0
2019-04-01 02:00:00   12.0

4 个答案:

答案 0 :(得分:1)

您可以使用resample

df.set_index('DateTime').resample('H').sum().drop('SENSOR', axis=1)

                     PROD
DateTime                 
2019-04-01 00:00:00  10.0
2019-04-01 01:00:00   6.0
2019-04-01 02:00:00  12.0

注意:如果您的DateTime列尚未采用日期时间格式,请先执行以下操作:

df['DateTime'] = pd.to_datetime(df['DateTime'])

答案 1 :(得分:1)

您可以像这样使用DataFrame.resample

df.resample('H').sum()

但是要使用resample,您需要确保索引为DatetimeIndex。我认为有几种方法可以做到这一点,但是您可以尝试:

df.index = pd.DatetimeIndex(df.index)

也-SO的目的更多是为您遇到麻烦的问题寻求帮助。如果您有这样的疑问,则应该首先尝试谷歌搜索并阅读文档。

https://stackoverflow.com/help/how-to-ask

答案 2 :(得分:1)

您需要使用pd.Grouper

df.set_index('DateTime').drop('SENSOR',1).groupby(pd.Grouper(freq='1h')).aggregate(np.sum)

输出:

                    PROD
DateTime        
2019-04-01 00:00:00 10.0
2019-04-01 01:00:00 6.0
2019-04-01 02:00:00 12.0

答案 3 :(得分:0)

resample支持选项on,以指定用于重采样而不是索引的列。因此,您无需将set_index设置为datetimeindex。只需在on

中指定列名
df.resample('H', on='DateTime').PROD.sum()

Out[1948]:
DateTime
2019-04-01 00:00:00    10.0
2019-04-01 01:00:00     6.0
2019-04-01 02:00:00    12.0
Freq: H, Name: PROD, dtype: float64

另一种方法是在将groupby转换为df.DateTime时使用datetime64[h]

df.groupby(df.DateTime.astype('datetime64[h]')).PROD.sum()

Out[8]:
DateTime
2019-04-01 00:00:00    10.0
2019-04-01 01:00:00     6.0
2019-04-01 02:00:00    12.0
Name: PROD, dtype: float64