一次将列值与另一个熊猫日期时间索引进行比较

时间:2020-07-28 21:20:54

标签: python pandas dataframe

我有一个带有日期时间索引和某些列“值”的熊猫数据框。我想将一天中给定时间的“值”值与同一天不同时间的值进行比较。例如。比较上午10点和晚上10点的值。

现在,我可以使用以下任一方式获取值:

mask = df[(df.index.hour == hour)]

问题是这将返回在小时索引的数据帧。因此执行mask1.value-mask2.value会返回Nan,因为索引不同。

我可以以一种复杂的方式解决这个问题:

out = mask.value.loc["2020-07-15"].reset_index() - mask2.value.loc["2020-07-15"].reset_index() #assuming mask2 is the same as the mask call but at a different hour

,但是要遍历跨越多年的数据集就很麻烦。 (显然,我可以在循环中使用timedelta + = 1来避免硬调用)。

我实际上并不关心是否有一些难解之谜,例如上午10点,值丢失了。

编辑:

初始数据框:

index                  values
2020-05-10T10:00:00     23
2020-05-10T11:00:00     20
2020-05-10T12:00:00     5
.....
2020-05-30T22:00:00     8
2020-05-30T23:00:00     8
2020-05-30T24:00:00     9

预期的数据框:

index        date         newval
  0         2020-05-10     18
.....
  x         2020-05-30     1

其中newval是上述两个不同时间的减法(例如10am测量-12pm测量,因此23-5 = 18),第二个输入就构成了

日期对我来说没关系,

1 个答案:

答案 0 :(得分:0)

解决方法:

mask1 = df[(df.index.hour == hour1)]
mask2 = df[(df.index.hour == hour2)]
out = mask1.values - mask2.values # df.values returns an np array without indices
result_df = pd.DataFrame(index=pd.daterange(start,end), data=out)

它应该节省您遍历日期的工作