如何用Pandas按条件提取行创建新DataFrame并计算均值?
Pandas筛选欧盟国家数据并计算最高海拔平均值
我的DataFrame结构如下(数据规模较大,仅展示示例):
| 国家 | 海岸线 | 欧盟 | 最高海拔 | |
|---|---|---|---|---|
| 1 | Norway | yes | yes | 1500 |
| 2 | Turkey | yes | no | 20100 |
| ... | ... | ... | ... | ... |
| 41 | Bolivia | no | no | 999 |
| 42 | Japan | yes | no | 89 |
需要完成的任务:仅针对欧盟国家,展示最高海拔列的最大值、最小值对应国家及平均值。目前已经解决最大值和最小值的问题,但在创建仅包含欧盟列为yes的新DataFrame时遇到困难,尝试多种方法均未成功。我认为创建筛选后的DataFrame是最佳方案,也欢迎其他思路。
以下是我已实现的示例代码(筛选非欧盟国家的最低海拔):
print('Minimum outside the EU') paises[(paises.EU == "no")].sort_values(by=['highest'], ascending=[True]).head(1)
输出结果:
| 国家 | 海岸线 | 欧盟 | 最高海拔 | |
|---|---|---|---|---|
| 3 | Belarus | no | no | 345 |
要求必须使用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
相关产品推荐
相关产品推荐

