同一日期两个不同时间之间的价值差异
Difference of value between two different times at the same date
我有一个数据框 df
如下:
Datetime Value
2020-03-01 08:00:00 10
2020-03-01 10:00:00 12
2020-03-01 12:00:00 15
2020-03-02 09:00:00 1
2020-03-02 10:00:00 3
2020-03-02 13:00:00 8
2020-03-03 10:00:00 20
2020-03-03 12:00:00 25
2020-03-03 14:00:00 15
我想计算每个日期第一次和最后一次的差值(忽略一个日期内其他时间的值),所以结果将是:
Datetime Value_Difference
2020-03-01 5
2020-03-02 7
2020-03-03 -5
我一直在使用 for 循环执行此操作,但是当我有较大的数据时它很慢(正如预期的那样)。任何帮助将不胜感激。
一个解决方案是确保数据按时间排序,按数据分组,然后取每天的第一个和最后一个值。这是有效的,因为 pandas 将在 groupby
期间保留顺序,参见例如here.
df = df.sort_values(by='Datetime').groupby(df['Datetime'].dt.date).agg({'Value': ['first', 'last']})
df['Value_Difference'] = df['Value']['last'] - df['Value']['first']
df = df.drop('Value', axis=1).reset_index()
结果:
Datetime Value_Difference
2020-03-01 5
2020-03-02 7
2020-03-03 -5
Shaido 的方法有效,但由于在非常大的集合上使用 groupby,可能会很慢
另一种可能的方法是从转换为 int 的日期中获取差异,并且只在没有循环的情况下获取必要的值。
idx = df.index
loc = np.diff(idx.strftime('%Y%m%d').astype(int).values).nonzero()[0]
loc1 = np.append(0,loc)
loc2 = np.append(loc,len(idx)-1)
res = df.values[loc2]-df.values[loc1]
df = pd.DataFrame(index=idx.date[loc1],values=res,columns=['values'])
我有一个数据框 df
如下:
Datetime Value
2020-03-01 08:00:00 10
2020-03-01 10:00:00 12
2020-03-01 12:00:00 15
2020-03-02 09:00:00 1
2020-03-02 10:00:00 3
2020-03-02 13:00:00 8
2020-03-03 10:00:00 20
2020-03-03 12:00:00 25
2020-03-03 14:00:00 15
我想计算每个日期第一次和最后一次的差值(忽略一个日期内其他时间的值),所以结果将是:
Datetime Value_Difference
2020-03-01 5
2020-03-02 7
2020-03-03 -5
我一直在使用 for 循环执行此操作,但是当我有较大的数据时它很慢(正如预期的那样)。任何帮助将不胜感激。
一个解决方案是确保数据按时间排序,按数据分组,然后取每天的第一个和最后一个值。这是有效的,因为 pandas 将在 groupby
期间保留顺序,参见例如here.
df = df.sort_values(by='Datetime').groupby(df['Datetime'].dt.date).agg({'Value': ['first', 'last']})
df['Value_Difference'] = df['Value']['last'] - df['Value']['first']
df = df.drop('Value', axis=1).reset_index()
结果:
Datetime Value_Difference
2020-03-01 5
2020-03-02 7
2020-03-03 -5
Shaido 的方法有效,但由于在非常大的集合上使用 groupby,可能会很慢
另一种可能的方法是从转换为 int 的日期中获取差异,并且只在没有循环的情况下获取必要的值。
idx = df.index
loc = np.diff(idx.strftime('%Y%m%d').astype(int).values).nonzero()[0]
loc1 = np.append(0,loc)
loc2 = np.append(loc,len(idx)-1)
res = df.values[loc2]-df.values[loc1]
df = pd.DataFrame(index=idx.date[loc1],values=res,columns=['values'])