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

基于Pandas分组求和并绘制含NaN的等高线图技术咨询

解决方案

1. 计算每个坐标点的N值之和

首先通过pandas的分组聚合功能,按Lon和Lat对数据分组后求和:

import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame({
    'Lon': [2,2,2,2,3,3],
    'Lat': [1,2,3,2,2,2],
    'N': [1,2,1,1,1,1]
})

# 按坐标分组求和
sum_df = df.groupby(['Lon', 'Lat'], as_index=False)['N'].sum()
print(sum_df)

运行输出结果:

Lon  Lat  N
0    2    1  1
1    2    2  3
2    2    3  1
3    3    2  2

2. 生成网格数据并绘制等高线

先生成指定网格的所有坐标,合并已有数据并填充缺失值,最后转换为矩阵格式绘制等高线:

import numpy as np
import matplotlib.pyplot as plt

# 定义网格范围
Lon_grid = np.arange(1,5)
Lat_grid = np.arange(1,4)

# 生成所有网格坐标的笛卡尔积
lon_mesh, lat_mesh = np.meshgrid(Lon_grid, Lat_grid)
grid_df = pd.DataFrame({
    'Lon': lon_mesh.flatten(),
    'Lat': lat_mesh.flatten()
})

# 合并数据,缺失位置填充0(也可替换为np.nan)
full_grid_df = pd.merge(grid_df, sum_df, on=['Lon', 'Lat'], how='left').fillna(0)
full_grid_df['N'] = full_grid_df['N'].astype(int)
print(full_grid_df)

# 将数据转换为网格矩阵(适配绘图要求)
n_matrix = full_grid_df['N'].values.reshape(len(Lat_grid), len(Lon_grid))

# 绘制等高线图
plt.contourf(Lon_grid, Lat_grid, n_matrix, cmap='viridis')
plt.colorbar(label='N值')
plt.xlabel('经度(Lon)')
plt.ylabel('纬度(Lat)')
plt.title('坐标点N值等高线图')
plt.show()

运行输出的全网格数据:

Lon  Lat  N
0     1    1  0
1     2    1  1
2     3    1  0
3     4    1  0
4     1    2  0
5     2    2  3
6     3    2  2
7     4    2  0
8     1    3  0
9     2    3  1
10    3    3  0
11    4    3  0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:30:54