Запись в файл списка, в котором уникальная строка из столбца 1 получает несколько строк из столбца 2 - PullRequest
0 голосов
/ 18 февраля 2020

Я совершенно новичок в 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

Я пытался, но я не могу понять, нужно ли мне некоторое время l oop, и если l oop или a для l oop. Когда я пытаюсь время и мои циклы go на вечность.

Здесь одна попытка:

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. Любые предложения, чтобы это исправить?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Это еще один подход, из которого я думаю:

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)
0 голосов
/ 18 февраля 2020

Вот один из подходов, на которые ответил мой друг Кави sh:

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

Кредит { ссылка }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...