我有一个带有时间点(时间戳)的表,如果两个时间点之间的间隔小于一分钟,我需要对时间增量求和,并更新时间点的日期时间边界。
对于'time_break'小于60的行,我需要以下内容:
- 将"time_delta"与来自前一行的"time_delta"相加;
- 用上一行的值"ts_start"更新"ts_start";
- 计算新的"time_break",使其对于更新的时间点是正确的
输入数据:
df = pd.DataFrame({'ts_start': [1647854644, 1647855323, 1647855454, 1647855521, 1647858807, 1647858858, 1647858970],
'ts_end': [1647854699, 1647855421, 1647855521, 1647856205, 1647858810, 1647858958, 1647859020],
'time_break': [105.0, 624.0, 33.0, 0.0, 2602.0, 48.0, 12.0],
'time_delta': [55, 98, 67, 625, 3, 100, 50]})
预期输出:
df_out = pd.DataFrame({'ts_start': [1647854644, 1647855323, 1647858807],
'ts_end': [1647854699, 1647856205, 1647859020],
'time_break': [105.0, 624.0, 2602.0],
'time_delta': [55, 790, 153]})
但是我知道它运行得很慢,而且它错过了双倍的时间。我认为有可能使用groupby,但是我不能想出一个解决方案。
如有任何帮助,将不胜感激,谢谢!
我试过这个:
for i in range(1, len(df)):
try:
if 0 <= df.iloc[i, df.columns.get_loc('time_break')] <= 60:
df.iloc[i, df.columns.get_loc('time_delta')] += df.iloc[i-1, df.columns.get_loc('time_delta')]
df.iloc[i, df.columns.get_loc('ts_start')] = df.iloc[i-1, df.columns.get_loc('ts_start')]
df.iloc[i, df.columns.get_loc('time_break')] = df.iloc[i, df.columns.get_loc('ts_start')] - df.iloc[i-2, df.columns.get_loc('ts_end')]
df.drop(index=i-1, inplace=True)
df = df.reset_index(drop=True)
except IndexError:
break;
1条答案
按热度按时间bttbmeg01#
试试看:
印刷品: