忽略groupby()子句中的最后一个值



我想知道这是否可能。我目前有一行代码,它累加Total Time (s)列中的所有值,按列CycleNumber中包含的值分组。进入一个名为cycle_times的列表。我现在正在这样做:

cycle_times = raw_data['Total Time (s)'].diff().fillna(0).groupby(interim_output['CycleNumber']).cumsum()

在组by的末尾提供一个输出,如下所示:

print(interim_output['CycleNumber'][328:334])
328    1
329    1
330    1
331    2
332    2
333    2
print(cycle_times[328:334])
328    65.643
329    65.673
330    65.994
331    66.008
332       0.0
333     0.251

这正是我想要的。然而,正如您所看到的,CycleNumber中的第一个实例2正在加到总数中(机器在其读数中重置所需的短时间)。是否有使用groupBy的方法,并告诉它忽略这个值,或者强迫它在CycleNumber的变化时重置?如果我这样做,我想要的输出将是:

print(cycle_times[328:334])
328    65.643
329    65.673
330    65.994
331       0.0
332       0.0
333     0.251

任何帮助将是最感激的!

我认为缺少一个.groupby(df['CycleNumber'])来获得您想要的内容,请参阅"cycle_times_V1"但是,生成的代码非常难以读懂。我添加了一个版本,它给出了相同的输出,但更显式,参见"cycle_times_V2">

import numpy as np
import pandas as pd
df = pd.DataFrame({"CycleNumber": [1, 1, 1, 2, 2, 2],
"Total Time (s)": list(range(6))})
df["cycle_times_before"]  = df['Total Time (s)'].diff().fillna(0).groupby(df['CycleNumber']).cumsum()
df["cycle_times_V1"] = df['Total Time (s)'].groupby(df['CycleNumber']).diff().fillna(0).groupby(df['CycleNumber']).cumsum()
# this gives the same, but is much more explicit
df["cycleStartTime"] = np.nan
for groupItem, df_group in df.groupby(by="CycleNumber"):
df.loc[df_group.index,"cycleStartTime"] = df_group["Total Time (s)"].min()
df["cycle_times_V2"] = df["Total Time (s)"] - df["cycleStartTime"]

最新更新