如何为含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
相关产品推荐
相关产品推荐

