在R中根据DataFrame单元格值重复ID的实现方法求助
解决方案:生成重复ID与连续年龄序列
核心思路
直接通过构造年龄序列列表,再利用Pandas的explode方法展开列表,自动实现ID的重复与年龄序列的生成,无需额外合并DataFrame。
步骤实现
- 导入依赖与构造示例数据
import pandas as pd # 替换为你的原始数据 df = pd.DataFrame({ 'id': ['A001', 'B002', 'C003'], 't_p': [45, 52, 48], 't_c': [55, 60, 53] })
- 生成年龄序列列
对每行数据生成从50到t_c的连续整数列表,同时过滤掉t_c < 50的无效行(若需保留可调整逻辑):
# 过滤t_c小于50的行(可选) df = df[df['t_c'] >= 50].copy() # 构造年龄序列:range左闭右开,所以t_c要+1 df['age'] = df.apply(lambda row: list(range(50, row['t_c'] + 1)), axis=1)
- 展开列表生成最终结果
用explode将列表拆分为单独行,自动重复对应ID与其他列数据:
result_df = df.explode('age').reset_index(drop=True) # 整理列顺序(按需调整) result_df = result_df[['id', 'age', 't_p']]
示例输出
处理后的结果如下(截取部分):
| id | age | t_p |
|---|---|---|
| A001 | 50 | 45 |
| A001 | 51 | 45 |
| A001 | 52 | 45 |
| A001 | 53 | 45 |
| A001 | 54 | 45 |
| A001 | 55 | 45 |
| B002 | 50 | 52 |
| B002 | 51 | 52 |
| B002 | 60 | 52 |
边界处理说明
- 若存在
t_c < 50的行:上述代码直接过滤,若需保留可将list(range(...))替换为[None]或其他占位值,explode后会保留该行但年龄为占位值。 - 若
t_c == 50:生成的列表仅包含50,explode后该行仅出现一次。
内容的提问来源于stack exchange,提问作者DN98024
相关产品推荐
相关产品推荐

