Python 为每个源记录构造一个列表
我这里有一个csv表,包含两列:“源多边形ID”和“邻居多边形ID”。我想制作一个包含一系列“相邻多边形ID”的列表,只要列表中的项共享公共的“源多边形ID” 以下是csv表的示例: 下面是我想要得到的一个示例结果:Python 为每个源记录构造一个列表,python,list,pandas,csv,Python,List,Pandas,Csv,我这里有一个csv表,包含两列:“源多边形ID”和“邻居多边形ID”。我想制作一个包含一系列“相邻多边形ID”的列表,只要列表中的项共享公共的“源多边形ID” 以下是csv表的示例: 下面是我想要得到的一个示例结果: 我使用pandas读取csv表,并使用groupby函数按其公共“源多边形ID”对“邻居多边形ID”进行排序。但是,这并不能帮助我为每个“源多边形ID”构建“相邻多边形ID”列表。有什么解决办法吗 这里有一个小片段,它只使用标准python库就可以实现您想要的功能。我假设相邻关
我使用pandas读取csv表,并使用groupby函数按其公共“源多边形ID”对“邻居多边形ID”进行排序。但是,这并不能帮助我为每个“源多边形ID”构建“相邻多边形ID”列表。有什么解决办法吗 这里有一个小片段,它只使用标准python库就可以实现您想要的功能。我假设相邻关系是对称的,因此如果A是B的邻居,那么B也是A的邻居(如果不是这种情况,那么只需删除第一个for循环中的第二行) 我使用的是
defaultdict
,它是一个普通python字典的子类,除了试图访问字典中不存在的键外,其行为与之完全相同。在这种情况下,它将该键的值实例化为默认值,您可以在创建字典时设置该值。在这种情况下,它是一个空集。这就是为什么访问邻居[row['source']]
永远不会抛出KeyError
代码的其余部分非常简单,我只是读取输入文件,并为每个id构建一组相邻的id。之后,我将这些写入输出文件
import csv
from collections import defaultdict
neighbours = defaultdict(set)
with open('input.csv') as f:
reader = csv.DictReader(f)
for row in reader:
neighbours[row['source']].add(row['neighbour'])
neighbours[row['neighbour']].add(row['source'])
with open('output.csv', 'w') as f:
writer = csv.writer(f)
# Write the header
writer.writerow(['source', 'neighbours'])
# Write the data
for key, values in neighbours.items():
writer.writerow([key, ','.join(values)])
作为pd导入csv导入熊猫#在arcpy中激活空间扩展;设置工作区arcpy.CheckOutExtension(“Spatial”)env.workspace=“G:\\GLUE\u Work\\Projects\\NSF\\DaneCountyTest”#使用pandas df=pd.read\u csv(“G:\\GLUE\u Work\\Projects\\NSF\\DaneCountyTest\\AdjacencyTableDane\u cb.csv”)#通过读取csv文件来构造数据帧。read\u csv(“G:\\GLUE\u Work\\Projects\\DaneCountyTest\\AdjacencyTableDane\u cb.csv”)#sourcegrouped=df.groupby('src_GISJOI')。apply(lambda x:x['nbr_GISJOI'])非常喜欢打印sourcegroupedThanks!那正是我想要的!