基于列条件复制Pandas DataFrame指定行的实现方案
问题描述
现有如下Pandas DataFrame:
import pandas as pd a = {'x(%)': {1: 0.0, 2: 10.0, 3: 20.0, 4: 30.0, 5: 40.0, 6: 50.0, 7: 59.8, 8: 60.0, 9: 70.0, 10: 80.0, 11: 86.6, 12: 93.2, 13: 96.6, 14: 100.0}, 'x(m)': {1: 0.0, 2: 0.6900000000000001, 3: 1.3800000000000001, 4: 2.0700000000000003, 5: 2.7600000000000002, 6: 3.45, 7: 4.1262,8: 4.140000000000001,9: 4.83, 10: 5.5200000000000005, 11: 5.9754000000000005, 12: 6.4308000000000005, 13: 6.6654, 14: 6.9}, 'Mx*': {1: -770.577, 2: -671.482, 3: -576.72, 4: -486.28, 5: -400.145, 6: -318.304, 7: -242.342,8: -240.742, 9: -167.45, 10: -98.415, 11: -55.056, 12: -13.552, 13: 6.513, 14: 26.092}} df = pd.DataFrame.from_dict(a)
初始输出结果:
x(%) x(m) Mx* 1 0.0 0.0000 -770.577 2 10.0 0.6900 -671.482 3 20.0 1.3800 -576.720 4 30.0 2.0700 -486.280 5 40.0 2.7600 -400.145 6 50.0 3.4500 -318.304 7 59.8 4.1262 -242.342 8 60.0 4.1400 -240.742 9 70.0 4.8300 -167.450 10 80.0 5.5200 -98.415 11 86.6 5.9754 -55.056 12 93.2 6.4308 -13.552 13 96.6 6.6654 6.513 14 100.0 6.9000 26.092
需要复制x(%)列值为20.0、40.0、60.0或80.0的行,得到如下目标结果:
x(%) x(m) Mx* 1 0.0 0.0000 -770.577 2 10.0 0.6900 -671.482 3 20.0 1.3800 -576.720 3 20.0 1.3800 -576.720 4 30.0 2.0700 -486.280 5 40.0 2.7600 -400.145 5 40.0 2.7600 -400.145 6 50.0 3.4500 -318.304 7 59.8 4.1262 -242.342 8 60.0 4.1400 -240.742 8 60.0 4.1400 -240.742 9 70.0 4.8300 -167.450 10 80.0 5.5200 -98.415 10 80.0 5.5200 -98.415 11 86.6 5.9754 -55.056 12 93.2 6.4308 -13.552 13 96.6 6.6654 6.513 14 100.0 6.9000 26.092
解决方案
方法一:拼接原数据与目标行子集
先筛选出需要复制的行,将原DataFrame与筛选结果拼接后按索引排序,保证相同索引的行相邻且顺序不变:
# 定义需要复制的目标值 target_values = [20.0, 40.0, 60.0, 80.0] # 筛选出待复制的行 rows_to_duplicate = df[df['x(%)'].isin(target_values)] # 拼接并排序 result_df = pd.concat([df, rows_to_duplicate]).sort_index(kind='mergesort')
方法二:指定行重复次数
生成每行的重复次数数组,目标行重复2次,其余行重复1次,直接提取重复后的结果:
target_values = [20.0, 40.0, 60.0, 80.0] # 生成重复次数映射 repeat_times = df['x(%)'].isin(target_values).map({True: 2, False: 1}) # 按次数重复行 result_df = df.loc[df.index.repeat(repeat_times)]
内容的提问来源于stack exchange,提问作者warem
相关产品推荐
相关产品推荐

