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

如何用Pandas按条件提取行创建新DataFrame并计算均值?

Pandas筛选欧盟国家数据并计算最高海拔平均值

我的DataFrame结构如下(数据规模较大,仅展示示例):

国家海岸线欧盟最高海拔
1Norwayyesyes1500
2Turkeyyesno20100
...............
41Bolivianono999
42Japanyesno89

需要完成的任务:仅针对欧盟国家,展示最高海拔列的最大值、最小值对应国家及平均值。目前已经解决最大值和最小值的问题,但在创建仅包含欧盟列为yes的新DataFrame时遇到困难,尝试多种方法均未成功。我认为创建筛选后的DataFrame是最佳方案,也欢迎其他思路。

以下是我已实现的示例代码(筛选非欧盟国家的最低海拔):

print('Minimum outside the EU')
paises[(paises.EU == "no")].sort_values(by=['highest'], ascending=[True]).head(1)

输出结果:

国家海岸线欧盟最高海拔
3Belarusnono345

要求必须使用Pandas解决。


解决方案

1. 创建仅含欧盟国家的DataFrame

首先确保筛选条件与列名一致(如果你的DataFrame中欧盟列的列名是英文EU,用以下代码;如果是中文欧盟,替换成'欧盟'):

# 列名为英文EU的情况
eu_countries = paises[paises['EU'] == 'yes']
# 列名为中文欧盟的情况
eu_countries = paises[paises['欧盟'] == 'yes']

如果之前尝试失败,可能是列名拼写错误(比如大小写、中英文不一致),或者数据中yes/no存在空格等格式问题,可以先检查确认:

# 查看EU列的唯一值,确认格式
print(paises['EU'].unique())

2. 计算并展示所需统计值

有了筛选后的eu_countries,可以直接提取所需数据:

# 最大值对应国家
max_row = eu_countries[eu_countries['highest'] == eu_countries['highest'].max()]
# 最小值对应国家
min_row = eu_countries[eu_countries['highest'] == eu_countries['highest'].min()]
# 平均值
avg_highest = eu_countries['highest'].mean()

print('欧盟国家最高海拔最大值:')
print(max_row[['国家', '最高海拔']])
print('\n欧盟国家最高海拔最小值:')
print(min_row[['国家', '最高海拔']])
print(f'\n欧盟国家最高海拔平均值:{avg_highest:.2f}')

3. 更简洁的方式(无需单独创建DataFrame)

如果不想单独生成新DataFrame,可以直接在原数据上链式筛选计算:

# 筛选欧盟国家的最高海拔数据
eu_highest = paises[paises['EU'] == 'yes']['highest']

# 提取对应信息
max_country = paises.loc[eu_highest.idxmax(), '国家']
max_value = eu_highest.max()
min_country = paises.loc[eu_highest.idxmin(), '国家']
min_value = eu_highest.min()
avg_highest = eu_highest.mean()

print(f'欧盟国家最高海拔最大值:{max_country} ({max_value})')
print(f'欧盟国家最高海拔最小值:{min_country} ({min_value})')
print(f'欧盟国家最高海拔平均值:{avg_highest:.2f}')

内容的提问来源于stack exchange,提问作者Rodrigo Mora Palta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:30:56