如何计算Pandas DataFrame时间戳索引的timedelta?
你报错的核心原因是向pd.TimedeltaIndex()传入了完整的DataFrame对象,而该方法需要接收时间差类的输入数据,且你要处理的对象是DataFrame的时间索引,而非整个数据集。
场景1:计算相邻两行索引的时间差
直接调用时间索引的diff方法即可:
# 时间差默认保留纳秒单位 df['elapsed_from_prev'] = df.index.to_series().diff() # 如果需要转为分钟的数值格式,可以按以下方式处理 df['elapsed_minutes'] = df.index.to_series().diff().dt.total_seconds() / 60
场景2:计算每行索引距离数据集最早时间点的时间差
直接做索引和起始时间的差值运算即可:
# 取数据集最早的时间戳作为基准 start_ts = df.index.min() df['elapsed_from_start'] = df.index - start_ts # 如需转为小时的数值格式 df['elapsed_hours'] = (df.index - start_ts).dt.total_seconds() / 3600
如果你一定要用pd.TimedeltaIndex()实现,可以按以下正确写法传入索引差值:
df['elapsed_from_start'] = pd.TimedeltaIndex(df.index - df.index.min())
你之前直接把df传给pd.TimedeltaIndex(),方法会读取整个DataFrame的所有值做转换,维度和你要赋值的单列不匹配,才会抛出元素数量不符的错误。
内容的提问来源于stack exchange,提问作者bbartling
相关产品推荐
相关产品推荐

