|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 zzong2019 于 2020-10-2 11:50 编辑
现有一组2019年全国GDP百强城市名单,包含序号,省区,城市,GDP(亿元)四个字段,需要找出每个省区中排名第三位的城市。详细数据见上传附件。
规则如下:如果是直辖市,且这个直辖市是GDP100强以内,则输出该直辖市的记录;如果不是直辖市,且在100强以内找不到第三名,输出‘查无结果’;找得到第三名,则输出第三名城市的记录
我的代码编写是这样的:
- GDP_Data_2019=pd.read_excel('D:\\python学习\\网易微专业数据分析课程\\python数据分析基础\\2019年GDP排名100强城市.xlsx')
- def top_3(x):
- if x['省区'].isin(['上海','北京','天津','重庆']):
- return x
- elif len(x)<=2:
- return '查无结果'
- else:
- return x.iloc[2,:]
- result=GDP_Data_2019.groupby(['省区'])[['城市','GDP(亿元)']].apply(top_3)
- result
复制代码
运行result=GDP_Data_2019.groupby(['省区'])[['城市','GDP(亿元)']].apply(top_3)这一句的时候报错KeyError:'省区'
随后我进行了调试发现,如果运行GDP_Data_2019.groupby(['省区'])不会报错,运行result=GDP_Data_2019.groupby(['省区']).agg({'GDP(亿元)':'mean'})依然不会报错,说明代码中的字段和数据表是能够匹配的,现在不知道原因出在哪里了,求大佬指导,感谢~~~
在你代码的基础上改了下,不知道是不是你要的效果:
- import pandas as pd
- def top_3(x):
- chengshi = x['城市'].values
- if len(chengshi) == 1:
- if chengshi[0] in ['上海', '北京', '天津', '重庆']:
- return chengshi[0]
- else:
- return '查无结果'
- elif len(chengshi) == 2:
- return '查无结果'
- else:
- return chengshi[2]
- GDP_Data_2019 = pd.read_excel(r'D:\python\test\2019年GDP排名100强城市.xlsx')
- GDP_Data_2019 = GDP_Data_2019.sort_values(by='GDP(亿元)', ascending=False)
- temp = GDP_Data_2019.groupby(by=['省区'])[['城市', 'GDP(亿元)']].apply(top_3)
- print(temp)
复制代码
省区
上海 上海
云南 查无结果
内蒙古 包头
北京 北京
吉林 查无结果
四川 查无结果
天津 天津
安徽 滁州
山东 烟台
山西 查无结果
广东 佛山
广西 查无结果
新疆 查无结果
江苏 无锡
江西 九江
河北 保定
河南 南阳
浙江 温州
湖北 宜昌
湖南 常德
甘肃 查无结果
福建 厦门
贵州 查无结果
辽宁 查无结果
重庆 重庆
陕西 查无结果
黑龙江 查无结果
dtype: object
Process finished with exit code 0
|
|