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

如何基于X、Y两列匹配Python DataFrame并存储对应AGE值?

基于X、Y列匹配DataFrame并更新AGE列表的正确实现

原代码存在的问题

  • 遍历df1时默认迭代的是列名(而非行索引),导致df1["X"].values[n]会因索引类型不匹配报错
  • 嵌套循环逻辑混乱,未实现“X、Y组合匹配”的核心需求
  • pandas的Series没有push方法,无法直接用该操作添加元素

推荐实现方法

方法1:用pandas内置方法高效处理(适合大数据量)

利用groupby聚合AGE列表,再通过merge匹配到df2中,是性能最优的方案:

import pandas as pd

# 构建示例数据
df1 = pd.DataFrame({
    'X': [2.0, 1.0, 1.5, 2.0, 0.0],
    'Y': [1.5, 0.5, 0.5, 2.0, 1.5],
    'AGE': [25, 29, 21, 32, 19]
})

df2 = pd.DataFrame({
    'X': [0.0]*5 + [0.5]*5 + [1.0]*5 + [1.5]*5 + [2.0]*5,
    'Y': [0.0,0.5,1.0,1.5,2.0]*5,
    'AGE': [[] for _ in range(25)]
})

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

# 合并到df2,填充未匹配的行保持原空列表
df2 = df2.merge(age_groups, on=['X', 'Y'], how='left', suffixes=('', '_new'))
df2['AGE'] = df2['AGE_new'].fillna(df2['AGE']).apply(lambda x: x if isinstance(x, list) else [])
df2.drop(columns=['AGE_new'], inplace=True)

# 查看结果
print(df2)

方法2:构建映射字典遍历更新(逻辑直观)

先把df1的X-Y组合和AGE值存入字典,再遍历df2匹配更新:

import pandas as pd

# 构建示例数据(同上)
df1 = pd.DataFrame({
    'X': [2.0, 1.0, 1.5, 2.0, 0.0],
    'Y': [1.5, 0.5, 0.5, 2.0, 1.5],
    'AGE': [25, 29, 21, 32, 19]
})

df2 = pd.DataFrame({
    'X': [0.0]*5 + [0.5]*5 + [1.0]*5 + [1.5]*5 + [2.0]*5,
    'Y': [0.0,0.5,1.0,1.5,2.0]*5,
    'AGE': [[] for _ in range(25)]
})

# 构建(X,Y)到AGE的映射字典
age_map = df1.set_index(['X', 'Y'])['AGE'].to_dict()

# 遍历df2更新AGE列
for idx, row in df2.iterrows():
    key = (row['X'], row['Y'])
    if key in age_map:
        df2.at[idx, 'AGE'] = [age_map[key]]

# 查看结果
print(df2)

内容的提问来源于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 11:27:07