如何在Pandas中计算奇偶行时间差并保留奇数行ts值?
问题描述
需要计算Pandas数据框中奇数行与对应偶数行的时间差,同时保留奇数行的ts值。现有代码已正确算出时间差delta,但未保留奇数行的ts值。
现有代码
import pandas as pd data = [ ['04-21 10:45:21.718'], ['04-21 10:45:22.718'], ['04-21 10:45:24.718'], ['04-21 10:45:28.718'], ['04-21 10:45:32.718'], ['04-21 10:45:38.718'] ] df = pd.DataFrame(data,columns=['ts']) df['ts'] = pd.to_datetime(df['ts'],format="%m-%d %H:%M:%S.%f") print(df) df2 = pd.DataFrame(df['ts'].values[1::2] - df['ts'].values[::2],columns=['delta']) df2['delta'] = df2['delta'].dt.total_seconds() print(df2)
当前输出
ts 0 1900-04-21 10:45:21.718 1 1900-04-21 10:45:22.718 2 1900-04-21 10:45:24.718 3 1900-04-21 10:45:28.718 4 1900-04-21 10:45:32.718 5 1900-04-21 10:45:38.718 delta 0 1.0 1 4.0 2 6.0
期望输出
ts delta 1 1900-04-21 10:45:22.718 1.0 2 1900-04-21 10:45:28.718 4.0 3 1900-04-21 10:45:38.718 6.0
解决方案
修改代码,在生成结果数据框时同时加入奇数行的ts值,并调整索引匹配期望输出:
import pandas as pd data = [ ['04-21 10:45:21.718'], ['04-21 10:45:22.718'], ['04-21 10:45:24.718'], ['04-21 10:45:28.718'], ['04-21 10:45:32.718'], ['04-21 10:45:38.718'] ] df = pd.DataFrame(data,columns=['ts']) df['ts'] = pd.to_datetime(df['ts'],format="%m-%d %H:%M:%S.%f") print(df) # 提取奇数行ts,计算与对应偶数行的时间差 df2 = pd.DataFrame({ 'ts': df['ts'].iloc[1::2].values, 'delta': (df['ts'].iloc[1::2] - df['ts'].iloc[::2]).dt.total_seconds() }) # 调整索引从1开始 df2.index = range(1, len(df2)+1) print(df2)
修改说明
- 使用
df['ts'].iloc[1::2]直接提取奇数行的ts值,加入结果数据框 - 直接在数据框构造时计算时间差并转换为秒数,简化步骤
- 通过
df2.index = range(1, len(df2)+1)将结果索引调整为从1开始,匹配期望输出格式
内容的提问来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

