zzong2019 发表于 2020-10-2 09:55:22

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

本帖最后由 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
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'})依然不会报错,说明代码中的字段和数据表是能够匹配的,现在不知道原因出在哪里了,求大佬指导,感谢~~~

疾风怪盗 发表于 2020-10-2 11:22:09

本主题需向作者支付 10 鱼币 才能浏览{:10_284:}

巴巴鲁 发表于 2020-10-2 11:32:17

疾风怪盗 发表于 2020-10-2 11:22
本主题需向作者支付 10 鱼币 才能浏览

牛,解答问题还要付费(虽然我不会)

疾风怪盗 发表于 2020-10-2 11:39:48

巴巴鲁 发表于 2020-10-2 11:32
牛,解答问题还要付费(虽然我不会)

{:10_284:}设置错了吧。。。。。。。。有谁会去付10个鱼币呢。。。。。

zzong2019 发表于 2020-10-2 11:50:40

疾风怪盗 发表于 2020-10-2 11:22
本主题需向作者支付 10 鱼币 才能浏览

设置错了,我想悬赏要怎么弄,你会答么

疾风怪盗 发表于 2020-10-2 12:30:43

zzong2019 发表于 2020-10-2 11:50
设置错了,我想悬赏要怎么弄,你会答么

不会。。。。。太复杂了。。。。。没研究透

疾风怪盗 发表于 2020-10-2 12:50:36

在你代码的基础上改了下,不知道是不是你要的效果:
import pandas as pd


def top_3(x):
    chengshi = x['城市'].values
    if len(chengshi) == 1:
      if chengshi in ['上海', '北京', '天津', '重庆']:
            return chengshi
      else:
            return '查无结果'
    elif len(chengshi) == 2:
      return '查无结果'
    else:
      return chengshi


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

zzong2019 发表于 2020-10-2 13:37:43

疾风怪盗 发表于 2020-10-2 12:50
在你代码的基础上改了下,不知道是不是你要的效果:

省区


你真的好厉害啊~能不能和你加个QQ?我给你发红包奖励~

疾风怪盗 发表于 2020-10-2 13:39:21

zzong2019 发表于 2020-10-2 13:37
你真的好厉害啊~能不能和你加个QQ?我给你发红包奖励~

{:10_284:}。。。。。。。本来我想自己写,都写不出来。。。。。。

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

设个最佳就行了。。。。。。。。。。
页: [1]
查看完整版本: pandas中groupby和apply函数的搭配使用(执行语句报错)