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

如何使用循环和条件语句遍历两个DataFrame生成新DataFrame

基于循环实现Pandas DataFrame指定操作实现方案

示例数据构造

先给出可直接运行的测试数据构造代码,方便验证逻辑:

import pandas as pd

# 构造示例df
df = pd.DataFrame({
    'g_pairs': ['p1', 'p2', 'p3', 'p4'],
    'g_a': ['id1', 'id2', 'id3', 'id4'],
    'g_b': ['id2', 'id3', 'id4', 'id1'],
    'clust1': [0.02, 0.06, 0.03, 0.07],
    'clust2': [0.1, 0.2, 0.3, 0.4] # 多余集群列,后续会删除
})

# 构造示例df2
df2 = pd.DataFrame({
    'clust_1n': ['id1', 'id2', 'id3', 'id4'],
    'clust_1l': [10, 20, 30, 40],
    'clust_2n': ['id1', 'id2', 'id3', 'id4'],
    'clust_2l': [100, 200, 300, 400] # 多余集群列,后续会删除
})

分步实现(全循环逻辑)

注意:iterrows() 是Pandas中最常用的行循环遍历方法,返回的行是原数据的副本,直接修改row值不会生效,需要通过loc索引定位到原DataFrame的对应位置修改

  • 步骤1:筛选保留指定集群相关列
target_clust = 'clust1'
# 筛选df保留指定列
df = df[['g_pairs', 'g_a', 'g_b', target_clust]].copy()
# 筛选df2保留对应集群的n、l列,重命名简化后续处理
df2 = df2[[f'{target_clust}_n', f'{target_clust}_l']].copy()
df2.columns = ['n', 'l']
  • 步骤2、3:循环匹配ID,新增g_a_val、g_b_val列
# 先初始化两列为空值
df['g_a_val'] = None
df['g_b_val'] = None

# 外层循环遍历df的每一行
for df_idx, df_row in df.iterrows():
    # 内层循环遍历df2的每一行匹配ID
    for df2_idx, df2_row in df2.iterrows():
        # 匹配g_a
        if df_row['g_a'] == df2_row['n']:
            df.loc[df_idx, 'g_a_val'] = df2_row['l']
        # 匹配g_b
        if df_row['g_b'] == df2_row['n']:
            df.loc[df_idx, 'g_b_val'] = df2_row['l']
  • 步骤4:循环计算每行g_a_val和g_b_val的和,存入sums列
df['sums'] = None
for idx, row in df.iterrows():
    df.loc[idx, 'sums'] = row['g_a_val'] + row['g_b_val']
  • 步骤5:循环判断clust1值,替换符合条件的sums为0
for idx, row in df.iterrows():
    if row[target_clust] >= 0.051:
        df.loc[idx, 'sums'] = 0

最终输出示例

g_pairs  g_a  g_b  clust1  g_a_val  g_b_val  sums
0      p1  id1  id2    0.02       10       20    30
1      p2  id2  id3    0.06       20       30     0
2      p3  id3  id4    0.03       30       40    70
3      p4  id4  id1    0.07       40       10     0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:27:02