我想知道这是否可能。我目前有一行代码,它累加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"]