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

如何按列表重复次数从DataFrame中选行且不改变列顺序?

问题

现有如下Pandas DataFrame:

import pandas as pd

data = {'Date': ['22-08-2021', '12-09-2021', '02-10-2021', '22-11-2021'], 
        'ID': ['A', 'B', 'C', 'O'], 
        'Item':['Apple','Banana','Carrot', 'Orange'], 
        'Cost':[10, 12, 15, 13]}
dataframe = pd.DataFrame(data)

另有ID列表:

index_list = ['A', 'A', 'B', 'B', 'O', 'C', 'C']

需要按照index_list中ID的重复次数与顺序,选取DataFrame中对应行生成目标DataFrame。目前已通过for循环实现,希望找到Pandas内置的更优雅高效的实现方法。

高效实现方法

推荐两种Pandas原生的高效实现方式,均无需手动循环:

方法1:使用merge合并

将index_list转换为单列DataFrame,再与原DataFrame按ID字段合并,自动匹配并生成对应重复行:

# 把index_list转为DataFrame
id_df = pd.DataFrame({'ID': index_list})
# 合并得到目标DataFrame
result_df = id_df.merge(dataframe, on='ID')

方法2:使用reindex重索引

先将原DataFrame的索引设为ID,再通过reindex按照index_list的顺序和重复值重新生成行,最后重置索引:

# 设置ID为索引,重索引后重置索引
result_df = dataframe.set_index('ID').reindex(index_list).reset_index()

两种方法都能得到相同的目标结果,输出示例:

ID        Date    Item  Cost
0  A  22-08-2021   Apple    10
1  A  22-08-2021   Apple    10
2  B  12-09-2021  Banana    12
3  B  12-09-2021  Banana    12
4  O  22-11-2021  Orange    13
5  C  02-10-2021  Carrot    15
6  C  02-10-2021  Carrot    15

这两种方法都利用了Pandas内部优化的向量操作,性能远优于手动for循环,尤其在数据量较大时优势明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:12:10