如何按Group分组将DataFrame的ID列拆分为from ID和下移一位的to ID
解决方案
你可以通过pandas的分组偏移函数shift()实现转换,具体代码如下:
如果还没有构造测试DataFrame,可以先运行以下代码生成和你示例一致的数据:
import pandas as pd data = { 'Group': [1,1,1,1,2,2,2,2,2,2], 'ID': [3,1,7,1,2,1,9,3,5,2], 'Days': [0,7,11,16,0,3,9,18,21,5], 'Days1': [7,7,7,1,7,7,7,7,7,1] } df = pd.DataFrame(data)
核心转换代码:
# 生成to ID列:同Group下ID向下偏移1位 df['to ID'] = df.groupby('Group')['ID'].shift(-1) # 重命名原ID列为from ID df = df.rename(columns={'ID': 'from ID'}) # 删除每个分组最后一行无to ID的无效记录 df = df.dropna(subset=['to ID']) # 调整to ID数据类型为整数,避免显示为浮点数 df['to ID'] = df['to ID'].astype(int) # 调整列顺序匹配你需要的输出格式 df = df[['Group', 'from ID', 'to ID', 'Days', 'Days1']] # 重置索引(可选) df = df.reset_index(drop=True)
运行完成后得到的df就和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者tj judge
相关产品推荐
相关产品推荐

