农经权确权过程中要收集很多信息,最重要的信息为每户有多少块地,这户又有多少人来着。在村里公示的时候,不仅要有图纸公示位置,而且要有对应的表格看公示信息。然而存在一个问题,一户的地块数跟家庭成员数量不会有对应关系,用excel表格处理,没法做到将地块表与家庭成员表结合到一块。于是就需要一个python程序来解决这问题。
1、问题展示
家庭成员表,记录家庭成员个数:户号18家庭5人,户号19家庭4人。
地块信息表,记录每户地块数量与面积:户号18家庭7块地,户号19家庭2块地。
两张表要合并,每户需要的行数是取家庭成员数量与地块数量二者的大值,用excel操作,往往是将一张表合并到另外一张表,那就需要其中一张表增加行数,切用VLOOKUP命令也不好使。形成的公示表:18号户需7行,19号户需4行。
2、解决问题
通过Python来解决上面的问题。分三步骤:1、计算每户的家庭成员数与地块数,取其大值作为每户公示表(目标表)需要的行数(备用);2、将每户家庭成员表、地块表增加到与公示表数量一致;3、合并家庭成员表与地块数表。
3、代码实例
由于这里面地块的面积来自第三张表,这里就一并处理将三张表进行合并。为了让大家理解代码,将三张表:t1sl.xlsx、t2jtcyb.xlsx、t3htmj.xlsx,截图展示。
t1sl.xlsx
t2jtcyb.xlsx
t3htmj.xlsx
下面为代码实例:
'''
公示表出表,共计有三个原始表,用这三个原始表将公示表输出;
表1,矢量表需要字段:承办方编码CBFBM、实测面积、地块名称、地块编码、东至、西至、南至、北至
表2,家庭成员表需要字段:承办方编码、承包方姓名、性别、与户主关系、身份证号
表3,地块信息表需要字段:地块编码、合同面积
输出表格包括:序号、承包方代表姓名缩略码、总数、姓名、性别、与户主关系、身份证号、合同面积、实测面积、地块名称、地块编码、东至、南至、西至、北至、地块类别、
取得承包方式、土地用途、合同面积,实测面积
'''
import pandas as pd
a=pd.read_excel('t1sl.xlsx')
b=pd.read_excel('t2jtcyb.xlsx')
c=pd.read_excel('t3htmj.xlsx')
t1_cbfbm=a['CBFBM'].values.tolist()#承包方编码
t1_dkbm=a['DKBM'].values.tolist()#地块编码
dkmc=a['DKMC'].values.tolist()#地块名称
dkdz=a['DKDZ'].values.tolist()#地块东至
dkxz=a['DKXZ'].values.tolist()#地块西至
dknz=a['DKNZ'].values.tolist()#地块南至
dkbz=a['DKBZ'].values.tolist()#地块北至
scmj=a['SCMJM'].values.tolist()#地块实测面积
t2_cbfbm=b['承包方编码'].values.tolist()#承包方编码
t2_name = b['成员姓名'].values.tolist()#成员姓名
xb=b['性别'].values.tolist()#成员性别
yhzgx=b['与户主关系'].values.tolist()#与户主关系
zjh=b['成员证件号码'].values.tolist()#承包方编码
t3_dkbm=c['DKBM'].values.tolist()#地块编码
htmj=c['YHTMJM'].values.tolist()#地块实测面积
# 地块编码对应的合同面积建立字典
htmj_dict={}
for i in range(len(t3_dkbm)):
htmj_dict[t3_dkbm[i]]=htmj[i]
# 先统计出每个承包方编码有多少个地块、多少个家庭成员
num_dk={}
num_jtcy={}
cbfbm_list=list(set(t1_cbfbm))
# 升序排列
cbfbm_list.sort()
# 计算出总的行数
# trow=0
# 每个承包方编码需要的行数,
bianma_row={}
for i in range(len(cbfbm_list)):
k1=t1_cbfbm.count(cbfbm_list[i])
k2=t2_cbfbm.count(cbfbm_list[i])
num_dk[cbfbm_list[i]]= k1
num_jtcy[cbfbm_list[i]] = k2
if k1>k2:
bianma_row[cbfbm_list[i]]=k1
else:
bianma_row[cbfbm_list[i]]=k2
# 将表1中元素扩充
t1_cbfbm_kc=[]
t1_dkbm_kc=[]
dkmc_kc=[]
dkdz_kc=[]
dkxz_kc=[]
dknz_kc=[]
dkbz_kc=[]
scmj_kc=[]
htmj_kc=[]
for i in range(len(t1_cbfbm)-1):
m1=t1_cbfbm[i]
m2=t1_cbfbm[i+1]
t1_cbfbm_kc.append(t1_cbfbm[i])
t1_dkbm_kc.append(t1_dkbm[i])
dkmc_kc.append(dkmc[i])
dkdz_kc.append(dkdz[i])
dkxz_kc.append(dkxz[i])
dknz_kc.append(dknz[i])
dkbz_kc.append(dkbz[i])
scmj_kc.append(scmj[i])
try:
htmj_kc.append(htmj_dict[t1_dkbm[i]])
except:
htmj_kc.append(scmj[i])
if m1!=m2:
if num_dk[m1]<num_jtcy[m1]:
n=num_jtcy[m1]-num_dk[m1]
n1=[]
n2=[]
n3=[]
for j in range(n):
n1.append(m1)
n2.append('')
n3.append(0)
t1_cbfbm_kc=t1_cbfbm_kc+n1
t1_dkbm_kc=t1_dkbm_kc+n2
dkmc_kc=dkmc_kc+n2
dkdz_kc=dkdz_kc+n2
dkxz_kc=dkxz_kc+n2
dknz_kc=dknz_kc+n2
dkbz_kc=dkbz_kc+n2
scmj_kc=scmj_kc+n3
htmj_kc=htmj_kc+n3
t1_cbfbm_kc=t1_cbfbm_kc+[t1_cbfbm[-1]]
t1_dkbm_kc=t1_dkbm_kc+[t1_dkbm[-1]]
dkmc_kc=dkmc_kc+[dkmc[-1]]
dkdz_kc=dkdz_kc+[dkdz[-1]]
dkxz_kc=dkxz_kc+[dkxz[-1]]
dknz_kc=dknz_kc+[dknz[-1]]
dkbz_kc=dkbz_kc+[dkbz[-1]]
scmj_kc=scmj_kc+[scmj[-1]]
htmj_kc=htmj_kc+[scmj[-1]]
# 将表2中元素扩充
t2_cbfbm_kc=[]
t2_name_kc=[]
xb_kc=[]
yhzgx_kc=[]
zjh_kc=[]
for i in range(len(t2_cbfbm)-1):
m1=t2_cbfbm[i]
m2=t2_cbfbm[i+1]
t2_cbfbm_kc.append(t2_cbfbm[i])
t2_name_kc.append(t2_name[i])
xb_kc.append(xb[i])
yhzgx_kc.append(yhzgx[i])
zjh_kc.append(zjh[i])
if m1!=m2:
if num_dk[m1]>num_jtcy[m1]:
n=num_dk[m1]-num_jtcy[m1]
n1=[]
n2=[]
for j in range(n):
n1.append(m1)
n2.append('')
t2_cbfbm_kc=t2_cbfbm_kc+n1
t2_name_kc=t2_name_kc+n2
xb_kc=xb_kc+n2
yhzgx_kc=yhzgx_kc+n2
zjh_kc=zjh_kc+n2
n=num_dk[t2_cbfbm[-1]]
n1=[]
n2=[]
n3=[]
for i in range(n):
n1.append(t2_cbfbm[-1])
n2.append('村集体')
n3.append('')
t2_cbfbm_kc=t2_cbfbm_kc+n1
t2_name_kc=t2_name_kc+n2
xb_kc=xb_kc+n3
yhzgx_kc=yhzgx_kc+n3
zjh_kc=zjh_kc+n3
# 地块的合同面积与实测面积求和
qh=['编码','面积1','面积2']
qh_list=[]
for i in range(len(t2_cbfbm_kc)):
qh_list.append([t1_cbfbm_kc[i],htmj_kc[i],scmj_kc[i]])
qhdf=pd.DataFrame(qh_list,columns=qh)
mj1=qhdf.groupby('编码')['面积1'].sum()
mj2=qhdf.groupby('编码')['面积2'].sum()
mj1_dict={}
mj2_dict={}
for i in range(len(cbfbm_list)):
mm1=mj1.values.tolist()
mm2=mj2.values.tolist()
mj1_dict[cbfbm_list[i]]=mm1[i]
mj2_dict[cbfbm_list[i]]=mm2[i]
tiltle_table=['xh','xmslm','zs','xm','xb','yhzgx','sfzh','zhtmj','zscmj','dkmc','dkbm','dz','nz','xz','bz','dklb','cbfs','tdyt','htmj','scmj']
name_list = []
for i in range(0,len(t1_cbfbm_kc)):
zs=str(num_jtcy[t2_cbfbm_kc[i]])+'人'
if t2_name_kc[i]!='':
xmslm=t2_name_kc[i]+str(t1_cbfbm_kc[i])[-5:]
else:
xmslm=''
zhtmj='合计:'+str(num_dk[t1_cbfbm_kc[i]])+'块' +str(round(mj1_dict[t1_cbfbm_kc[i]],2))+'亩'
zscmj = '合计:' + str(num_dk[t1_cbfbm_kc[i]])+'块' + str(round(mj2_dict[t1_cbfbm_kc[i]],2)) + '亩'
if scmj_kc[i]==0:
dklb=''
cbfs=''
tdyt=''
htmj_t=''
scmj_t=''
else:
dklb='承包地块'
cbfs='家庭承包'
tdyt='种植业'
htmj_t=str(htmj_kc[i])
scmj_t=str(scmj_kc[i])
# print(str(t1_cbfbm_kc[i])[-3:])
name_list.append([str(t1_cbfbm_kc[i])[-3:],xmslm,zs,t2_name_kc[i],xb_kc[i],yhzgx_kc[i],str(zjh_kc[i]),zhtmj,zscmj,dkmc_kc[i],
str(t1_dkbm_kc[i]),dkdz_kc[i],dknz_kc[i],dkxz_kc[i],dkbz_kc[i],
dklb,cbfs,tdyt,htmj_t,scmj_t])
df = pd.DataFrame(name_list, columns=tiltle_table)
df.to_excel('gsbsc.xlsx', index=False)
标签:kc,地块,权中,t2,家庭成员,list,cbfbm,t1,农经
From: https://blog.csdn.net/weixin_47364423/article/details/143635962