如何在pandas dataframe中新增列取同一ID对应1小时后的Capacity值
实现代码及说明
首先你需要先将DateTime列转换为pandas内置的时间格式,再通过关联匹配的方式拿到1小时后对应记录的Capacity值,该方案对时间序列无严格连续要求,兼容性更强:
import pandas as pd # 1. 转换时间格式,按ID、时间排序保证匹配正确性 df['DateTime'] = pd.to_datetime(df['DateTime']) df = df.sort_values(by=['ID', 'DateTime']).reset_index(drop=True) # 2. 生成当前行要匹配的1小时后的目标时间 df['target_time'] = df['DateTime'] + pd.Timedelta(hours=1) # 3. 自关联匹配对应时间的Capacity值 df = df.merge( df[['ID', 'DateTime', 'Capacity']], left_on=['ID', 'target_time'], right_on=['ID', 'DateTime'], how='left', suffixes=('', '_next_1h') ) # 4. 清理多余的辅助列 df = df.drop(columns=['target_time', 'DateTime_y'])
如果你的数据满足每个ID分组下的所有记录严格按1小时间隔排序、无缺失/冗余记录,也可以用更简洁的行偏移方案,性能更高:
df['DateTime'] = pd.to_datetime(df['DateTime']) df = df.sort_values(by=['ID', 'DateTime']).reset_index(drop=True) df['Capacity_next_1h'] = df.groupby('ID')['Capacity'].shift(-1)
两种方案中如果对应ID不存在1小时后的匹配记录,新增列的值会自动填充为NaN,符合逻辑。
内容的提问来源于stack exchange,提问作者BGR
相关产品推荐
相关产品推荐

