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

基于X、Y列匹配DataFrame并填充AGE字段的技术实现问询

解决DataFrame基于X、Y匹配并填充AGE列表的问题

首先明确你当前代码的核心问题:

  • for n in df1遍历的是DataFrame的列名(而非行索引),导致后续取值逻辑完全错误
  • 嵌套循环逻辑混乱,未实现X、Y两列同时匹配的条件
  • Pandas Series没有push方法,无法通过该方式修改列表元素
  • 仅按索引位置比较X/Y值,没有实现基于X/Y内容的精准匹配

以下提供两种可行的实现方案:

方案1:高效的Pandas原生分组合并法(推荐)

该方法利用Pandas的分组和合并功能,避免手动遍历,性能更优,适合大数据量场景:

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({
    'X': [20, 10, 15, 20, 0],
    'Y': [15, 5, 0, 20, 15],
    'AGE': [25, 29, 21, 32, 19]
})

df2 = pd.DataFrame({
    'X': [0,0,0,0,0,5,5,5,5,5,10,10,10,10,10,15,15,15,15,15,20,20,20,20,20],
    'Y': [0,5,10,15,20,0,5,10,15,20,0,5,10,15,20,0,5,10,15,20,0,5,10,15,20],
    'AGE': [[] for _ in range(25)]
})

# 1. 将df1按X、Y分组,聚合AGE为列表
grouped_age = df1.groupby(['X', 'Y'])['AGE'].apply(list).reset_index()

# 2. 合并到df2,保留df2所有行,匹配X/Y列
df2 = df2.merge(grouped_age, on=['X', 'Y'], how='left', suffixes=('', '_temp'))

# 3. 更新AGE列:有匹配值则用聚合后的列表,无匹配则保留原空列表
df2['AGE'] = df2.apply(
    lambda r: r['AGE_temp'] if pd.notna(r['AGE_temp']) else r['AGE'],
    axis=1
)

# 4. 删除临时列
df2.drop('AGE_temp', axis=1, inplace=True)

# 查看结果
print(df2)

方案2:手动遍历匹配法(适合小数据量)

如果你更习惯手动遍历的逻辑,修正后的代码如下:

import pandas as pd

# 构造示例数据(同上)
df1 = pd.DataFrame({
    'X': [20, 10, 15, 20, 0],
    'Y': [15, 5, 0, 20, 15],
    'AGE': [25, 29, 21, 32, 19]
})

df2 = pd.DataFrame({
    'X': [0,0,0,0,0,5,5,5,5,5,10,10,10,10,10,15,15,15,15,15,20,20,20,20,20],
    'Y': [0,5,10,15,20,0,5,10,15,20,0,5,10,15,20,0,5,10,15,20,0,5,10,15,20],
    'AGE': [[] for _ in range(25)]
})

# 遍历df1的每一行
for _, df1_row in df1.iterrows():
    # 找到df2中X、Y完全匹配的行
    match_indices = df2[(df2['X'] == df1_row['X']) & (df2['Y'] == df1_row['Y'])].index
    # 给每个匹配行的AGE列表添加值
    for idx in match_indices:
        df2.loc[idx, 'AGE'].append(df1_row['AGE'])

# 查看结果
print(df2)

两种方案都能得到你预期的输出结果:匹配行的AGE列表会填充对应值,未匹配行保留空列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:45:25