Ярлык Pandas по возрастанию

#python #pandas

#python #pandas

Вопрос:

Извините, если на этот вопрос уже был дан ответ, у меня возникли проблемы с распознаванием ошибки в следующем фрагменте кода

 for layer in set(df['i']):
    print(layer, end='r')
    df.loc[df['i'] == layer, ['c']]  = max_
    max_ = df.loc[df['i'] == layer, ['c']].max() 1
 

У меня есть набор данных, который состоит из идентификатора слоя и идентификатора кластера. В настоящее время идентификатор кластера зависит от идентификатора слоя, я хочу, чтобы идентификатор кластера был независимым. Перед следующим фрагментом кода последние несколько слоев имеют следующие значения кластера;

 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109}
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28}
 

После этого он меняется на;

 {49152, 49153, 49154, 49155, 49156, 49157, 49158, 49159, 49160, 49161, 49162, 49163, 49164, 49165, 49166, 49167, 49168, 49169, 49170, 49171, 49172, 49173, 49174, 49175, 49176, 49177, 49178, 49179, 49180, 49181, 49182, 49183, 49184, 49185, 49186, 49187, 49188, 49189, 49190, 49191, 49192, 49193, 49194, 49195, 49196, 49197, 49198, 49199, 49200, 49201, 49202, 49203, 49204, 49095, 49096, 49097, 49098, 49099, 49100, 49101, 49102, 49103, 49104, 49105, 49106, 49107, 49108, 49109, 49110, 49111, 49112, 49113, 49114, 49115, 49116, 49117, 49118, 49119, 49120, 49121, 49122, 49123, 49124, 49125, 49126, 49127, 49128, 49129, 49130, 49131, 49132, 49133, 49134, 49135, 49136, 49137, 49138, 49139, 49140, 49141, 49142, 49143, 49144, 49145, 49146, 49147, 49148, 49149, 49150, 49151}
{49205, 49206, 49207, 49208, 49209, 49210, 49211, 49212, 49213, 49214, 49215, 49216, 49217, 49218, 49219, 49220, 49221, 49222, 49223, 49224, 49225, 49226, 49227, 49228, 49229, 49230, 49231, 49232, 49233}
 

Я не понимаю, почему данные больше не находятся в числовом порядке.

Комментарии:

1. Отображаемый вывод — это a set — и множества неупорядочены (как в математике), поскольку порядок определяется из хеш-таблицы.

2. Даже если set неупорядочен, это должно изменить только порядок обработки слоев, а не способ их обработки. Например, если слой 10 является первым, то все идентификаторы кластера в этом слое должны добавить к себе max_ (который max_ начинается с 0). затем max_ обновится до нового максимального значения идентификаторов кластера и перейдет к следующему слою. Независимо от порядка обработки слоев порядок идентификаторов кластера не должен меняться.

Ответ №1:

Следуя комментарию @S3DEV, вы можете либо set полностью опустить:

 for layer in df['i']:
 

или, если целью было пройти через уникальные значения df['i'] , вы можете сделать

 for layer in df['i'].unique():
 

если это не решит вашу проблему, нам нужно увидеть более подробную информацию о вашем df

Комментарии:

1. Цель состоит в том, чтобы просмотреть каждое уникальное значение в df[‘i’] .

2. Что касается более подробной информации, df имеет 11 столбцов x, y, z, r, g, b, nx, ny, nz, i, c В настоящее время для «i» содержит идентификатор слоя, а «c» содержит идентификатор кластера в порядке возрастания. Однако идентификатор кластера сбрасывается для каждого уникального идентификатора слоя. Цель состоит в том, чтобы у каждого кластера был свой собственный идентификатор кластера, независимый от идентификатора слоя.