【问题标题】:Writing to file a list where a unique string from column 1 gets multiple strings from column 2写入文件列表,其中第 1 列的唯一字符串从第 2 列获取多个字符串
【发布时间】:2020-02-18 03:14:58
【问题描述】:

我对 python 完全陌生,需要帮助。我有一个有 2 列的表。第 1 列包含属,第 2 列包含种。我可以使用 SearchCursor 遍历列,并用属和种打印出每一行。我需要做的是打印出一个独特的属及其所有相关物种。所以例如我有:

Acer    Maple
Acer    Sugar Maple
Acer    Purple Maple
Abies   Jack Pine
Abies    Spruce

我想要

Acer|Maple|Sugar Maple|Purple Maple
Abies|Jack Pine|Spruce

我已经尝试过,但我无法确定是否需要 while 循环、if 循环或 for 循环。当我尝试 while 时,如果我的循环永远持续下去。

这里尝试一次:

myCursor1=arcpy.da.SearchCursor(FreqGISTable,["Genus","Species"])
for row in myCursor1:
    gisfile.write((row[0]).upper())
    if (row[0] == row[0]):
          gisfile.write(row[1])
    else:
         if (row[0] != row[0]):
            gisfile.write("END\n")

gisfile.close()
return gisfile

非常感谢您的帮助。我不得不稍微调整一下。该代码在大多数情况下都有效,但是我需要它打印所有 col2 项目,然后在行尾打印"END_OPTIONS|\n"

我尝试了很多方法来设置它,但它不起作用。 The line = row['col2'] + "|" 无法识别“|”当我尝试插入最终的结束选项时,它会将它放在每个 col2 项目之后。有什么建议可以解决这个问题吗?

【问题讨论】:

    标签: python-3.x multiple-columns arcpy


    【解决方案1】:

    这是我的朋友卡维什回答的一种方法:

    df = pd.DataFrame({'col1': ['Acer','Acer','Acer','Abies','Abies'], 'col2' : ['Maple','Sugar Maple','Purple Maple','Jack Pine','Spruce']})
    df
    
    col1    col2
    0   Acer    Maple
    1   Acer    Sugar Maple
    2   Acer    Purple Maple
    3   Abies   Jack Pine
    4   Abies   Spruce
    
    line = ""
    classes = df['col1'].unique()
    for c in classes:
        line = line + c + "|"
        for index, row in df.iterrows():
            if(row['col1'] == c):
                line = line + row['col2'] + "|"
        line = line[:-1]
        line = line + '\n'
    
    print(line)
    
    Acer|Maple|Sugar Maple|Purple Maple
    Abies|Jack Pine|Spruce
    

    感谢https://stackoverflow.com/users/12910033/kavish

    【讨论】:

      【解决方案2】:

      这是我想到的另一种方法:

      df = pd.DataFrame({'col1': ['Acer','Acer','Acer','Abies','Abies'], 'col2' : ['Maple','Sugar Maple','Purple Maple','Jack Pine','Spruce']})
      
      copy = ""
      
      df['col3'] = df['col1'].shift(1)
      
      for row in df.itertuples():
          if row.col1 == row.col3:
              copy = copy + row.col2 + "|"
          elif row.col1 != row.col3:
              copy = copy + " \n" + row.col1 + "|" + row.col2 + "|"
              copy = copy[1:]
      
      print(copy)
      

      【讨论】:

        猜你喜欢
        • 2011-10-29
        • 2016-06-03
        • 2017-09-24
        • 2014-09-01
        • 2018-10-24
        • 2018-10-25
        • 2014-09-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多