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

如何为含ID的Pandas DataFrame批量添加1-30对应行?

更简洁的DataFrame扩展方案:每个ID关联1-30整数

需求背景

现有仅包含ID列的DataFrame:

import pandas as pd
data = pd.DataFrame({'ID': ['D29305C3-6652-E911-B81F-005056962850', '570AE90B-CB53-EA11-B836-005056962850', '5F21D4D2-E156-EA11-B836-005056962850', '73579A31-1252-E911-B81F-005056962850']})

需要实现:每个ID重复30次,每行对应1到30的整数。

原方案问题

原手动生成重复列表再合并的方法不仅代码繁琐,还可能出现ID关联整数异常的问题。以下是两种更高效可靠的实现方式:

方案1:利用交叉连接(笛卡尔积)

先生成包含1-30整数的DataFrame,再与原ID DataFrame做交叉连接,直接得到所有ID与整数的组合:

# 生成1-30的整数DataFrame
numbers = pd.DataFrame({'Integers': range(1, 31)})
# 通过临时列实现交叉连接
data['key'] = 1
numbers['key'] = 1
result = pd.merge(data, numbers, on='key').drop('key', axis=1)

方案2:用repeat和tile构造

通过repeat重复每个ID 30次,tile重复1-30序列对应ID的数量,直接构造结果DataFrame:

# 重复每个ID 30次
id_repeated = data['ID'].repeat(30).reset_index(drop=True)
# 重复1-30序列,次数等于ID的总数量
integers_tiled = pd.Series([*range(1,31)] * len(data)).reset_index(drop=True)
# 组合成目标DataFrame
result = pd.DataFrame({'ID': id_repeated, 'Integers': integers_tiled})

方案优势

  • 代码简洁,无需循环和复杂的计数逻辑
  • 避免原方案中索引匹配错误导致的异常
  • 完全利用pandas内置方法,运行效率更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:25:18