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

基于条件对比从3个DataFrame生成新DataFrame的Pandas实现

实现方法与代码示例

先明确三个DataFrame的关联逻辑:

  • df1(网格+植被)和df2(网格+温度)通过经纬度网格关联
  • df1和df3(植被+温度阈值)通过植被类型关联

下面用示例数据演示完整步骤,你可以直接替换成自己的真实列名:

1. 模拟示例数据(真实场景可跳过)

import pandas as pd

# df1:网格+植被类型
df1 = pd.DataFrame({
    '经度': [100.0, 100.0, 101.0, 101.0],
    '纬度': [20.0, 21.0, 20.0, 21.0],
    '植被类型': ['森林', '草原', '荒漠', '森林']
})

# df2:网格+温度数据
df2 = pd.DataFrame({
    '经度': [100.0, 100.0, 101.0, 101.0],
    '纬度': [20.0, 21.0, 20.0, 21.0],
    'Tmax': [35, 38, 42, 32]
})

# df3:植被类型+温度阈值
df3 = pd.DataFrame({
    '植被类型': ['森林', '草原', '荒漠'],
    'limit_Tmax': [33, 40, 45]
})

2. 合并数据,关联所有字段

先把df1和df2按经纬度合并,得到每个网格+植被对应的温度;再和df3合并,拿到对应植被的温度阈值:

# 第一步:合并df1和df2(按经纬度匹配)
merged_df = pd.merge(df1, df2, on=['经度', '纬度'], how='left')

# 第二步:关联df3的温度阈值(按植被类型匹配)
merged_df = pd.merge(merged_df, df3, on='植被类型', how='left')

用how='left'是为了保留df1里所有的网格和植被数据,避免因匹配不到丢失行。

3. 计算Possible列

用Pandas向量化布尔运算处理,比循环高效得多(适合大型数据集):

# 判断逻辑:Tmax <= limit_Tmax 时为True,否则为False
merged_df['Possible'] = merged_df['Tmax'] <= merged_df['limit_Tmax']

最终结果示例

处理后的merged_df结构如下:

经度纬度植被类型Tmaxlimit_TmaxPossible
10020森林3533False
10021草原3840True
10120荒漠4245True
10121森林3233True

注意事项

  • 确保三个DataFrame中用于匹配的列名完全一致(比如经纬度列名都是'经度'/'纬度'),不一致的话先修改列名:df.rename(columns={'旧列名':'新列名'}, inplace=True)
  • 大型数据集优先用向量化列运算,避免逐行循环或apply,提升处理速度
  • 如果df3存在缺失的植被类型,merged_df里的limit_Tmax会是NaN,此时Possible也会是NaN,可根据需求用fillna处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:54:19