如何在pandas DataFrame行间应用多条件计算生成目标DataFrame
解决方案
你原方法的问题在于硬编码shift(-4)依赖固定的行顺序,一旦数据排序变化就会失效,以下是更稳健的实现方式:
实现代码
import pandas as pd import numpy as np # 1、拆分id的类型和序号,方便后续匹配 df['id_type'] = df['id'].str.split('_').str[0] df['id_suffix'] = df['id'].str.split('_').str[1] # 2、生成查找表,聚合每个时间戳+序号下,不同b_id的C、V类型对应的b_sent值 lookup = df.pivot_table( index=['timestamp', 'id_suffix'], columns=['b_id', 'id_type'], values='b_sent', aggfunc='first' ).reset_index() # 3、筛选原表中C类行(你的输出仅保留C类记录) result = df[df['id_type'] == 'C'].copy() # 4、关联查找表,按规则计算新字段 result = result.merge(lookup, on=['timestamp', 'id_suffix'], how='left') result['b_sent_new'] = np.where( result['b_id'] == 1, result[(1, 'C')] + result[(2, 'V')], result[(2, 'C')] + result[(1, 'V')] ) # 5、清理多余字段,得到最终输出 result = result[['timestamp', 't_id', 'b_id', 'id', 'b_sent', 'lc', 'b_sent_new']].reset_index(drop=True)
该方法不依赖数据的行顺序,只要timestamp、b_id、id三个字段的取值符合业务规则,就能正确计算结果。
内容的提问来源于stack exchange,提问作者MALAM
相关产品推荐
相关产品推荐

