为了保持可持续性,这些有问题的元素可以通过循环改变为零吗?



我有一个包含'日期'作为索引和'样本值'功能的数据框架。此数据框显示了这些日期的示例结果。然而,一些样本结果是重复的,因为样本不能在当天采集。例如,第一个样本是在2019-08-17 07:30:00上取的。由于不能在2019-08-17 08:00:00上取第二次样品,所以显示的结果与前一次相同。我需要用零来改变这些值,以便清理数据,但我不知道如何做到这一点。有什么可能的方法可以实现这一点吗?我将把期望的结果作为dataframe_desired

dataframe =     
date                    Sample Result
2019-08-17 07:30:00     548.700012
2019-08-17 08:00:00     548.700012
2019-08-17 08:30:00     548.700012
2019-08-17 09:00:00     553.099976
2019-08-17 09:30:00     555.346976
2019-08-17 10:00:00     548.700012
2019-08-17 10:30:00     548.700012
2019-08-17 11:00:00     546.750000
2019-08-17 11:30:00     546.750000
dataframe_desired = 
date                    Sample Result
2019-08-17 07:30:00     548.700012
2019-08-17 08:00:00     0.000000
2019-08-17 08:30:00     0.000000
2019-08-17 09:00:00     553.099976
2019-08-17 09:30:00     555.346976
2019-08-17 10:00:00     548.700012
2019-08-17 10:30:00     0.000000
2019-08-17 11:00:00     546.750000
2019-08-17 11:30:00     0.000000

这个应该可以完成…

dataframe["Dup Result"] = dataframe["Sample Result"].duplicated(keep='first')
dataframe["Clean Result"] = dataframe.apply(lambda row: 0.0 if row["Dup Result"] else row["Sample Result"], axis=1)
dataframe = dataframe.drop("Dup Result", axis=1)

如果我understoof正确你的问题,你想要设置的值等于前面的为零。这可以通过使用diff方法来完成:

df.loc[df.diff().squeeze()==0]=0

这里diff返回一个数据帧,包含diff_i,j = df_i,j - df_i-1,j。Squeezez用于将单列数据框转换为序列,以便将其作为索引传递给loc。然后,我们将差为0的值设为0。

您可以使用diff:

df.loc[df['Sample Result'].diff().eq(0), 'Sample Result'] = 0

相关内容

最新更新