在Pandas中按唯一member_id将attribute1列隔行值移至新列attribute2
问题:针对大型Pandas DataFrame按member_id将attribute1的下一行值移至新列attribute2
输入数据
member_id attribute1 1 AM 1 A 26 TSE 26 TSA 26 TSE ---- 97736 TMA 97736 TTE 97736 TMA 97736 ALM
需求
针对每个唯一的member_id,将attribute1列中同一组内下一行的值移至新列attribute2,得到如下输出:
期望输出
member_id attribute1 attribute2 1 AM A 26 TSE TSA 26 TSA TSE ---- 97736 TMA TTE 97736 TTE TMA 97736 TMA ALM
解决方案
针对大型DataFrame,使用Pandas内置的groupby+shift向量化操作,效率远高于循环处理每个分组:
import pandas as pd # 核心处理代码 df['attribute2'] = df.groupby('member_id')['attribute1'].shift(-1) # 可选:若需移除组内最后一行(该行无下一行数据,attribute2为NaN) # df = df.dropna(subset=['attribute2'])
说明
groupby('member_id'):按用户ID分组,确保移位操作仅在同一用户的行内执行shift(-1):对每个分组内的attribute1列向下移位,取当前行的下一行值作为当前行的attribute2- 该方法为向量化运算,无需遍历单个分组,处理百万级以上数据仍能保持高效
内容的提问来源于stack exchange,提问作者Stupid420
相关产品推荐
相关产品推荐

