我有以下熊猫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
答案 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的目的更多是为您遇到麻烦的问题寻求帮助。如果您有这样的疑问,则应该首先尝试谷歌搜索并阅读文档。
答案 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