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

如何高效替换DataFrame中符合条件的列值为3个新列数据?

解决方法

步骤1:构造示例数据

首先导入pandas并创建你提供的初始数据和对应表格:

import pandas as pd

# 初始DataFrame
df_initial = pd.DataFrame({
    'Ch': ['A', 'A', 'B', 'B'],
    'Time': ['1 min', '1 min', '2 min', '2 min']
})

# Ch=A对应的3列表格
df_A = pd.DataFrame({
    'A1': [1, 2, 1],
    'A2': [2, 3, 1],
    'A3': [3, 4, 2]
})

# Ch=B对应的3列表格
df_B = pd.DataFrame({
    'B1': [1, 1],
    'B2': [2, 1],
    'B3': [1, 1]
})

步骤2:统一列名

将A、B表格的列名替换为目标列名ColA、ColB、ColC,方便后续合并:

df_A_renamed = df_A.rename(columns={'A1': 'ColA', 'A2': 'ColB', 'A3': 'ColC'})
df_B_renamed = df_B.rename(columns={'B1': 'ColA', 'B2': 'ColB', 'B3': 'ColC'})

步骤3:重复表格数据

按照需求,将A、B表格各自重复两次:

# 重复A表格两次并重置索引
df_A_repeated = pd.concat([df_A_renamed] * 2, ignore_index=True)
# 重复B表格两次并重置索引
df_B_repeated = pd.concat([df_B_renamed] * 2, ignore_index=True)

步骤4:合并结果

将重复后的A、B表格合并,得到最终目标DataFrame:

result = pd.concat([df_A_repeated, df_B_repeated], ignore_index=True)

最终结果

运行后result的内容如下:

ColAColBColC
123
234
112
123
234
112
121
111
121
111

补充说明

如果你的需求是原DataFrame中每一行Ch=A对应展开为A表格的所有数据,再整体重复两次(比如原2行A对应2*3=6行,再重复两次得到12行A数据),可以用以下代码实现:

# 计算原DataFrame中Ch=A的行数
count_A = len(df_initial[df_initial['Ch'] == 'A'])
# 将A表格的每一行重复count_A次,得到展开后的A数据
df_A_expanded = df_A_renamed.loc[df_A_renamed.index.repeat(count_A)]
# 重复两次展开后的A数据
df_A_final = pd.concat([df_A_expanded] * 2, ignore_index=True)

# 同理处理Ch=B的情况
count_B = len(df_initial[df_initial['Ch'] == 'B'])
df_B_expanded = df_B_renamed.loc[df_B_renamed.index.repeat(count_B)]
df_B_final = pd.concat([df_B_expanded] * 2, ignore_index=True)

# 合并结果
result = pd.concat([df_A_final, df_B_final], ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:35:45