allen5211985 2019-11-09 22:44 采纳率: 66.7%
浏览 315
已采纳

从同一“区街道路村楼单元层”提取出缺失的房号,就是在第二列“房号”中,从最小到最大之间缺失的房号

目前手里有个表格,需要从同一“区街道路村楼单元层”提取出缺失的房号,就是在第二列“房号”中,从最小到最大之间缺失的房号。
本来是用了正则表达式,打算提取房号中的数字,然后从小到大进行比较,但是目前有两个问题:
1、同一街道这一块不知道应该怎么表述;
2、正则表达式提取出来的是个数组,没法进行大小比较。
目前想到的只有以下这些,小弟初学python想请哪位大哥指导一下,谢谢。
exported_alljob_path = r'C:/biaogezhuanyong/d.csv'##########定义打开文件
alljob = pd.read_csv(exported_alljob_path,encoding= 'gb18030')
alljob.loc[:,'区街道路村'] = alljob.loc[:,'所属区县'].str.cat(alljob['所属乡镇/街道']).\
str.cat(alljob['所属路/巷/行政村']).str.cat(alljob['所属小区/学校/自然村'])

col= ['所属区县','所属乡镇/街道','所属路/巷/行政村','所属小区/学校/自然村','所属楼','所属单元','所属层','区街道路村楼单元层','房号']
alljob_new = pd.DataFrame(alljob_first,columns = col)

daima = []
def re_1(i):
res = re .findall(r"\d+",i)
return res
alljob['层号2'] = alljob.apply(lambda x: re_1(x['所属层']),axis=1)

图片说明

以上是原始表格的截图。
以下是原始表格的数据:
区街道路村楼单元层 房号
海东街道西毛家庄西毛家庄00单元0层 1号
海东街道西毛家庄西毛家庄00单元0层 2号
海东街道西毛家庄西毛家庄00单元0层 52号
海东街道西毛家庄西毛家庄00单元0层 53号
海东街道西毛家庄西毛家庄00单元0层 54号
海东街道西毛家庄西毛家庄00单元0层 55号
海东街道西毛家庄西毛家庄00单元0层 56号
海东街道西毛家庄西毛家庄00单元0层 57号
海东街道西毛家庄西毛家庄00单元0层 98号
海东街道西毛家庄西毛家庄00单元0层 100号
海东街道西毛家庄西毛家庄00单元0层 136号
海东街道教师楼1号楼1单元1层 102号
海东街道教师楼1号楼1单元1层 101号
海东街道教师楼1号楼2单元2层 202号
海东街道教师楼1号楼2单元5层 501号
海东街道教师楼1号楼2单元6层 602号
海东街道后海西村后海西村000 后海西村3号
海东街道后海西村后海西村000 后海西村10号
海东街道后海西村后海西村000 后海西村11号
海东街道后海西村后海西村000 后海西村20号
海东街道后海西村后海西村000 后海西村21号
海东街道后海西村后海西村000 后海西村22号
海东街道后海西村后海西村000 后海西村23号
海东街道后海西村后海西村000 后海西村24号
海东街道后海西村后海西村000 后海西村25号

实在不好意思,之前是我描述的不够清晰,我想再补充一点,想找的不是一个街道的,而是以“同一小区同一楼同一单元同一层”下缺失的房号。

  • 写回答

1条回答 默认 最新

  • Edward_LA 2019-11-11 11:34
    关注

    有些细节可能您也没交代清楚,我就按照我的理解了。我生成了两个街道一个是海东街道一个是海西街道。
    基本思路是先提取出有哪些街道,遍历街道这是第一层
    第二层遍历每个街道下的所有Data,找出门牌号的集合
    生成1到最大门牌号的集合,并将其与上述门牌号的集合不同的元素提出来也即你需要的缺失的门牌号?
    如果有我忽略的细节再补充吧,我再修改
    Python 3.7
    20191119更新
    提供个思路
    原始数据您可以再挖掘下

    # Import
    import pandas as pd
    import os 
    import re
    import pdb
    
    # Specify
    root = '/Users/edward/Projects/Python/CSDN_Help/20191111_regula-rexpression/'
    os.chdir(root)
    data = pd.read_csv('data.csv')
    result = pd.DataFrame()
    loop1 = list(set(data['所属小区/学校/自然村'].to_list()))
    for ls in ['loc','miss']:
        locals()[ls] = []
    
    # Major
    for xiaoqu in loop1:
        loop2 = list(set(data.loc[data['所属小区/学校/自然村']==xiaoqu]['所属楼'].to_list()))
        for lou in loop2:
            loop3 = list(set(data.loc[data['所属小区/学校/自然村']==xiaoqu][data['所属楼']==lou]['所属单元'].to_list()))
            for danyuan in loop3:
                loop4 = list(set(data.loc[data['所属小区/学校/自然村']==xiaoqu][data['所属楼']==lou][data['所属单元']==danyuan]['所属层'].to_list()))
                for ceng in loop4:
                    lk = list(set(data.loc[data['所属小区/学校/自然村']==xiaoqu][data['所属楼']==lou][data['所属单元']==danyuan][data['所属层']==ceng]['房号'].to_list()))
                    tmp = []
                    for i in lk:
                        t = re.sub('\D', '' , i)
                        tmp.append(t)
                    tmp = list(set(tmp))
                    if len(tmp) < 2:
                        locals()['loc'].append(f'{xiaoqu}{lou}{danyuan}{ceng}')
                        if int(tmp[0][2]) == 1:
                            m = tmp[0][0:2]+'2'
                        else:
                            m = tmp [0][0:2]+'1'
                        locals()['miss'].append(m)
                    if len(tmp) > 2:
                        contrast = []
                        locals()['loc'].append(f'{xiaoqu}{lou}{danyuan}{ceng}')
                        for i in range(int(min(tmp)),int(max(tmp))):
                            contrast.append(str(i))
                        m = list(set(contrast) ^ set(tmp))
                        locals()['miss'].append(list(set(m)))
    
    result['缺失地址'] = locals()['loc']
    result['缺失房号'] = locals()['miss']
    result.to_csv('result.csv', index=None)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?