You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

网络分析中如何用前一时间戳的Target值填充Source列?

当然可以实现!

这个需求在时序数据处理里非常常见,本质就是按ID分组后,把当前行的Source字段填充为同组内上一行的Target值,用Python的Pandas库就能轻松搞定,下面是具体的实现步骤和代码:

核心思路

  1. 先确保数据按ID和时间严格排序(这是取"前一个时间戳"值的关键,顺序错了结果就会出错)
  2. 按ID分组,对Target列使用shift()方法,将值向下偏移一行,得到的结果就是对应行的Source值
  3. 每组的第一行因为没有上一行数据,会自动保留NA,正好匹配你的需求

具体代码实现

import pandas as pd

# 模拟你的原始表格数据
data = {
    'ID': [650, 650, 650],
    'Date': ['18/07/2019', '19/07/2019', '27/07/2019'],
    'Year': [2019, 2019, 2019],
    'Month': ['Jul', 'Jul', 'Jul'],
    'Day': [18, 19, 27],
    'Time': ['21:32', '23:47', '19:24'],
    'Target': ['Caledonia', 'Digby', 'Caledonia'],
    'Source': ['NA', 'NA', 'NA']
}

df = pd.DataFrame(data)

# 第一步:合并日期和时间为完整时间戳,转换为datetime类型确保排序准确
df['Timestamp'] = pd.to_datetime(df['Date'] + ' ' + df['Time'], format='%d/%m/%Y %H:%M')

# 第二步:按ID和时间戳排序,保证同ID下的行是按时间先后排列的
df = df.sort_values(by=['ID', 'Timestamp'])

# 第三步:按ID分组,将Target列下移一行赋值给Source
df['Source'] = df.groupby('ID')['Target'].shift(1)

# 可选:把Pandas自动生成的NaN替换成你示例里的'NA'格式
df['Source'] = df['Source'].fillna('NA')

# 输出你需要的列
print(df[['ID', 'Date', 'Year', 'Month', 'Day', 'Time', 'Target', 'Source']])

代码细节解释

  • pd.to_datetime(...):把分散的日期和时间字段合并成完整时间戳,确保排序是严格按时间先后的(如果你的原始数据已经是有序的,这一步可以简化,但建议保留以避免潜在的顺序问题)
  • sort_values(by=['ID', 'Timestamp']):保证同一个ID下的记录是按时间顺序排列的,这是取"前一个时间戳"值的核心前提
  • groupby('ID')['Target'].shift(1):对每个ID单独分组处理,把Target列的所有值向下移动一行,这样当前行的Source就等于上一行的Target;分组操作确保不会把不同ID的位置数据混在一起
  • fillna('NA'):把Pandas自动生成的空值NaN替换成你示例里的NA文本格式

运行这段代码后,你就能得到和期望完全一致的结果啦!

内容的提问来源于stack exchange,提问作者Courtney lR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:13:01