问题来源于一群小伙伴,其描述如下:
存在N对数据(X-Y形式),且X存在重复,即N对数据由X1-Y1、X1-Y2、X1-Y3、X2-Y4的形式组成。需要找出各个Xi对应下的Y最大值Ymax并重新进行存储至新表中。示意如下:
图1-1 问题描述
2.案例代码
基于问题描述,本文案例为建立一个6×6×6的模型,找出各个Z坐标下的单元ID最大值。python代码如下:
#代码背景
#建立一个6*6*6的立方体,提取各个z坐标下的单元id,找出各个z坐标下的最大单元id并单独输出为excel
import itasca as it
import pandas as pd
it.command("python-reset-state false")
#建立模型
it.command("""
model new
zone create brick size 6 6 6
zone densify
""")
#创建一个空字典zid和一个空列表zpos
zid = {}
zpos = []
#遍历单元,将ID-z坐标以键-值对的方式存放在zid中,将各单元的z坐标存放在zpos中
for z in it.zone.list():
zid[z.id()]=z.pos_z()
zpos.append(z.pos_z())
#对z坐标去重
new_zpos = list(set(zpos))
#获取z坐标个数
j = len(new_zpos)
#创建一个空字典new_zid
new_zid = {}
#遍历z坐标,将同一z坐标对应的单元id存放于列表keys中并获取最大值,然后将z坐标-最大ID以键-值对的方式存放于字典new_zid中
for i in range(j):
keys = []
for key in zid.keys():
if zid[key] == new_zpos[i]:
keys.append(key)
key_max = max(keys)
new_zid[new_zpos[i]] = key_max
#将字典new_zid中的键值对以z坐标从小到大进行排序
sorted_new_zid = dict(sorted(new_zid.items(),key=lambda x:x[0]))
#将字典new_zid中单元ID、z坐标分别存放在列表id_list、pos_list中
id_list = list(sorted_new_zid.values())
pos_list = list(sorted_new_zid.keys())
#创建空字典toExcel,并将上述列表id_list、pos_list存放在空字典toExcel中
toExcel = {}
toExcel['ZPOS'] = pos_list
toExcel['ID'] = id_list
#通过pandas库输出字典toExcel
df = pd.DataFrame(toExcel)
df.to_excel('ceshi.xlsx',index=False)
图3-1 输出结果