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

如何将pandas DataFrame中含delta的多行数据转换为对应列?

实现方法(Pandas环境,高效向量化操作)

以下方案无需循环,全用Pandas原生函数实现,百万行级数据也能秒级处理:

实现思路

你的数据是典型的「交替存储的配对行」结构:同一个ID下,dayN行后紧跟对应的delta行,我们只需要把两类行拆分后按配对关系合并即可。

具体代码

import pandas as pd

# 1、预处理:标记行类型
df = mydata_frame.copy()
df['is_delta'] = df['days'].str.contains('delta')
# 提取所有特征列名,后续自动加前缀无需手动指定
f_cols = [col for col in df.columns if col.startswith('f')]

# --- 关联方式1:按行顺序配对(要求原表同ID下的行严格按day、delta交替排序)
# 每个ID下每两行一组,生成配对ID
df['pair_id'] = df.groupby('IDs').cumcount() // 2
# 拆分主表(day行)和delta表
main_df = df[~df['is_delta']].drop(columns=['is_delta'])
delta_df = df[df['is_delta']].drop(columns=['is_delta', 'days'])
# 给delta表的特征列加del_前缀
delta_df = delta_df.rename(columns={c: f'del_{c}' for c in f_cols})
# 合并得到结果
res = pd.merge(main_df, delta_df, on=['IDs', 'pair_id'], how='left').drop(columns='pair_id')

# --- 关联方式2:从delta行的字段提取关联的day(不受行顺序影响,只要delta命名符合delta_dayX&dayY格式)
# 提取delta行对应的目标day(比如delta_day1&day2提取出day2作为关联键)
# df.loc[df['is_delta'], 'days'] = df.loc[df['is_delta'], 'days'].str.extract(r'&(day\d+)')[0]
# 拆分后直接按IDs和days合并
# main_df = df[~df['is_delta']]
# delta_df = df[df['is_delta']].rename(columns={c: f'del_{c}' for c in f_cols})
# res = pd.merge(main_df, delta_df, on=['IDs', 'days'], how='left').drop(columns='is_delta')

# 最后按ID和day排序规整格式
res = res.sort_values(['IDs', 'days']).reset_index(drop=True)

验证说明

两种方式都能得到你需要的输出结构,特征列f1~fn会自动和对应的del_f1~del_fn一一匹配,不需要手动指定每个特征的对应关系,不管你有多少个f列都能自动处理。


内容的提问来源于stack exchange,提问作者jeny ericsoon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:30:05