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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:54:04