Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为每个源记录构造一个列表_Python_List_Pandas_Csv - Fatal编程技术网

Python 为每个源记录构造一个列表

Python 为每个源记录构造一个列表,python,list,pandas,csv,Python,List,Pandas,Csv,我这里有一个csv表,包含两列:“源多边形ID”和“邻居多边形ID”。我想制作一个包含一系列“相邻多边形ID”的列表,只要列表中的项共享公共的“源多边形ID” 以下是csv表的示例: 下面是我想要得到的一个示例结果: 我使用pandas读取csv表,并使用groupby函数按其公共“源多边形ID”对“邻居多边形ID”进行排序。但是,这并不能帮助我为每个“源多边形ID”构建“相邻多边形ID”列表。有什么解决办法吗 这里有一个小片段,它只使用标准python库就可以实现您想要的功能。我假设相邻关

我这里有一个csv表,包含两列:“源多边形ID”和“邻居多边形ID”。我想制作一个包含一系列“相邻多边形ID”的列表,只要列表中的项共享公共的“源多边形ID”

以下是csv表的示例:

下面是我想要得到的一个示例结果:


我使用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!那正是我想要的!