鱼C论坛

 找回密码
 立即注册
查看: 1802|回复: 8

[已解决]pandas中groupby和apply函数的搭配使用(执行语句报错)

[复制链接]
发表于 2020-10-2 09:55:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zzong2019 于 2020-10-2 11:50 编辑

现有一组2019年全国GDP百强城市名单,包含序号,省区,城市,GDP(亿元)四个字段,需要找出每个省区中排名第三位的城市。详细数据见上传附件。
规则如下:如果是直辖市,且这个直辖市是GDP100强以内,则输出该直辖市的记录;如果不是直辖市,且在100强以内找不到第三名,输出‘查无结果’;找得到第三名,则输出第三名城市的记录
我的代码编写是这样的:
  1. GDP_Data_2019=pd.read_excel('D:\\python学习\\网易微专业数据分析课程\\python数据分析基础\\2019年GDP排名100强城市.xlsx')
  2. def top_3(x):
  3.     if x['省区'].isin(['上海','北京','天津','重庆']):
  4.         return x
  5.     elif len(x)<=2:
  6.         return '查无结果'
  7.     else:
  8.         return x.iloc[2,:]
  9. result=GDP_Data_2019.groupby(['省区'])[['城市','GDP(亿元)']].apply(top_3)
  10. result
复制代码

运行result=GDP_Data_2019.groupby(['省区'])[['城市','GDP(亿元)']].apply(top_3)这一句的时候报错KeyError:'省区'
随后我进行了调试发现,如果运行GDP_Data_2019.groupby(['省区'])不会报错,运行result=GDP_Data_2019.groupby(['省区']).agg({'GDP(亿元)':'mean'})依然不会报错,说明代码中的字段和数据表是能够匹配的,现在不知道原因出在哪里了,求大佬指导,感谢~~~
最佳答案
2020-10-2 12:50:36
在你代码的基础上改了下,不知道是不是你要的效果:
  1. import pandas as pd


  2. def top_3(x):
  3.     chengshi = x['城市'].values
  4.     if len(chengshi) == 1:
  5.         if chengshi[0] in ['上海', '北京', '天津', '重庆']:
  6.             return chengshi[0]
  7.         else:
  8.             return '查无结果'
  9.     elif len(chengshi) == 2:
  10.         return '查无结果'
  11.     else:
  12.         return chengshi[2]


  13. GDP_Data_2019 = pd.read_excel(r'D:\python\test\2019年GDP排名100强城市.xlsx')
  14. GDP_Data_2019 = GDP_Data_2019.sort_values(by='GDP(亿元)', ascending=False)
  15. temp = GDP_Data_2019.groupby(by=['省区'])[['城市', 'GDP(亿元)']].apply(top_3)
  16. print(temp)
复制代码

省区
上海       上海
云南     查无结果
内蒙古      包头
北京       北京
吉林     查无结果
四川     查无结果
天津       天津
安徽       滁州
山东       烟台
山西     查无结果
广东       佛山
广西     查无结果
新疆     查无结果
江苏       无锡
江西       九江
河北       保定
河南       南阳
浙江       温州
湖北       宜昌
湖南       常德
甘肃     查无结果
福建       厦门
贵州     查无结果
辽宁     查无结果
重庆       重庆
陕西     查无结果
黑龙江    查无结果
dtype: object

Process finished with exit code 0

2019年GDP排名100强城市.zip

10 KB, 下载次数: 4

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-2 11:22:09 | 显示全部楼层
本主题需向作者支付 10 鱼币 才能浏览
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-2 11:32:17 | 显示全部楼层
疾风怪盗 发表于 2020-10-2 11:22
本主题需向作者支付 10 鱼币 才能浏览

牛,解答问题还要付费(虽然我不会)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-2 11:39:48 | 显示全部楼层
巴巴鲁 发表于 2020-10-2 11:32
牛,解答问题还要付费(虽然我不会)

设置错了吧。。。。。。。。有谁会去付10个鱼币呢。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-2 11:50:40 | 显示全部楼层
疾风怪盗 发表于 2020-10-2 11:22
本主题需向作者支付 10 鱼币 才能浏览

设置错了,我想悬赏要怎么弄,你会答么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-2 12:30:43 | 显示全部楼层
zzong2019 发表于 2020-10-2 11:50
设置错了,我想悬赏要怎么弄,你会答么

不会。。。。。太复杂了。。。。。没研究透
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-2 12:50:36 | 显示全部楼层    本楼为最佳答案   
在你代码的基础上改了下,不知道是不是你要的效果:
  1. import pandas as pd


  2. def top_3(x):
  3.     chengshi = x['城市'].values
  4.     if len(chengshi) == 1:
  5.         if chengshi[0] in ['上海', '北京', '天津', '重庆']:
  6.             return chengshi[0]
  7.         else:
  8.             return '查无结果'
  9.     elif len(chengshi) == 2:
  10.         return '查无结果'
  11.     else:
  12.         return chengshi[2]


  13. GDP_Data_2019 = pd.read_excel(r'D:\python\test\2019年GDP排名100强城市.xlsx')
  14. GDP_Data_2019 = GDP_Data_2019.sort_values(by='GDP(亿元)', ascending=False)
  15. temp = GDP_Data_2019.groupby(by=['省区'])[['城市', 'GDP(亿元)']].apply(top_3)
  16. print(temp)
复制代码

省区
上海       上海
云南     查无结果
内蒙古      包头
北京       北京
吉林     查无结果
四川     查无结果
天津       天津
安徽       滁州
山东       烟台
山西     查无结果
广东       佛山
广西     查无结果
新疆     查无结果
江苏       无锡
江西       九江
河北       保定
河南       南阳
浙江       温州
湖北       宜昌
湖南       常德
甘肃     查无结果
福建       厦门
贵州     查无结果
辽宁     查无结果
重庆       重庆
陕西     查无结果
黑龙江    查无结果
dtype: object

Process finished with exit code 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-2 13:37:43 | 显示全部楼层
疾风怪盗 发表于 2020-10-2 12:50
在你代码的基础上改了下,不知道是不是你要的效果:

省区

你真的好厉害啊~能不能和你加个QQ?我给你发红包奖励~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-2 13:39:21 | 显示全部楼层
zzong2019 发表于 2020-10-2 13:37
你真的好厉害啊~能不能和你加个QQ?我给你发红包奖励~

。。。。。。。本来我想自己写,都写不出来。。。。。。

还是从你这学到了apply用法。。。。。。就修改了一点。。。。。

设个最佳就行了。。。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 13:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表