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

基于跨行条件创建Pandas布尔列:对比同区域隔年Geometry值

问题:基于同区域两年前的几何数据创建条件列

现有Pandas DataFrame包含Year(年份)、District(区域)、Geometry(几何数据,GeometryArray类型)列,需新增一列判断当前行的Geometry是否与同一区域两年前的Geometry相同(例如1902年101区域对比1900年101区域的几何数据),返回布尔值。

用户尝试的代码(存在逻辑与语法问题):

df['geometry change from last year'] = np.where(df['geometry'].at[df.index[i]]!= climate[geometry].at[df.index[i-2]], 'True', 'False')

示例数据:

YearDistrictGeometryTRUE/FALSE
1900101POLYGON ((-89.26355 41.32246, -89.26171 41.322...TRUE
1902101POLYGON ((-89.26355 41.33246, -89.26171 41.322...FALSE

解决方案

核心思路

由于年份可能不连续(如示例中无1901年数据),直接用shift()移位会导致匹配错误,因此采用合并关联的方式,精准匹配同区域、年份差2的几何数据后再对比。

步骤与代码

  1. 排序数据:确保同区域内年份按升序排列
df = df.sort_values(['District', 'Year']).reset_index(drop=True)
  1. 创建临时关联表:将年份减2,保留区域和对应年份的几何数据
temp_df = df[['District', 'Year', 'Geometry']].copy()
temp_df['Year'] = temp_df['Year'] - 2
temp_df = temp_df.rename(columns={'Geometry': 'geometry_2years_ago'})
  1. 关联原表与临时表:匹配同区域、年份差2的记录
df = df.merge(temp_df, on=['District', 'Year'], how='left')
  1. 生成条件列:对比当前几何数据与两年前的数据,返回布尔值
# 生成布尔值列(推荐使用,更适合后续数据处理)
df['geometry_change'] = df['Geometry'] != df['geometry_2years_ago']

# 若需字符串格式的TRUE/FALSE
df['geometry_change_str'] = df['geometry_change'].astype(str).str.upper()

结果说明

  • 无两年前数据的行(如示例中1900年记录),geometry_2years_ago为NaN,由于NaN与任何值对比均返回True,符合示例中的TRUE结果
  • 有两年前数据的行(如1902年记录),会精准对比同区域对应年份的几何数据,返回正确布尔值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:31:13