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

基于列条件复制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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:54:52