我使用 Pandas.groupby 对一组数据进行分组。
然后我要计算delta value
,该值由每个组的 first 元素与下一个分组的 first 元素之间的差给出: / p>
import pandas as pd
import numpy as np
import datetime
# dummy set of data
np.random.seed(0)
SIZE = 25
dt = pd.date_range(datetime.datetime(2018,1,1,10,14,30), freq="1Min", periods=SIZE)
wa = (np.random.random(size=SIZE)-.4)*1000
wa = np.cumsum(wa) + 10000
df = pd.DataFrame({"dtime":dt, "value":wa}).set_index("dtime")
grouped = df.groupby(pd.Grouper(freq='15Min'))
print("\n************\nDataframe:")
print df
print("\n************\nFirst value of each group:")
print(grouped.first())
print("\n************\nDelta value:")
print(-grouped.first().diff(periods=-1))
此代码返回:
************
Dataframe:
value
dtime
2018-01-01 10:14:30 10148.813504
2018-01-01 10:15:30 10464.002870
2018-01-01 10:16:30 10666.766246
2018-01-01 10:17:30 10811.649429
2018-01-01 10:18:30 10835.304229
....
2018-01-01 10:34:30 14209.714833
2018-01-01 10:35:30 14608.873397
2018-01-01 10:36:30 14670.352759
2018-01-01 10:37:30 15050.881935
2018-01-01 10:38:30 14769.156361
************
First value of each group:
value
dtime
2018-01-01 10:00:00 10148.813504
2018-01-01 10:15:00 10464.002870
2018-01-01 10:30:00 12350.307746
************
Delta value:
value
dtime
2018-01-01 10:00:00 315.189366
2018-01-01 10:15:00 1886.304875
2018-01-01 10:30:00 NaN <===== Here is my problem
最后一个增量当然是NaN
,因为没有下一个计算差异的组。
是否可以用最后一组的第一个和最后一个值之间的差异填充此NaN
?
作为最后一行2018-01-01 10:38:30 14769.156361
,它应该返回:
************
Delta value:
value
dtime
2018-01-01 10:00:00 315.189366
2018-01-01 10:15:00 1886.304875
2018-01-01 10:30:00 2418.848615
谢谢
答案 0 :(得分:0)
当然,只要我问了我就找到了答案。我将其留给其他用户使用。很明显...
delta = -grouped.first().diff(periods=-1)
delta = delta.fillna(grouped.last() - grouped.first())
print(delta)