У меня есть кадр данных pandas (результат) df с n (переменными) столбцами, который я создал с помощью слияния двух других кадров данных:

result1 = df1.merge(df2, on='ID', how='left')

Фрейм данных result1 должен иметь переменное количество столбцов (это часть большого скрипта). Я хочу расположить столбцы таким образом, чтобы последние 2 столбца были вторым и третьим последовательно, а затем все остальные столбцы следовали за ними (в то время как первый столбец оставался первым). Если известно, что result1 имеет 6 колонок, то я могу использовать:

result2=result1.iloc[:,[0,4,5,1,2,3]] #this works fine. 

Но мне нужно, чтобы 1,2,3 были в формате диапазона, поскольку непрактично вводить все числа для каждого df. Поэтому я подумал об использовании:

result2=result1.iloc[:,[0,len(result1.columns), len(result1.columns)-1, 1:len(result1.columns-2]]
#Assuming  6 columns :  0,           5        , 4                     ,  1,  2, 3

Это был бы идеальный способ, но он создает синтаксические ошибки. Есть предложения, как это исправить?

BioProgram

Ответов: 1

Ответы (1)

И вместо того, чтобы использовать синтаксис нарезки, я бы просто создал список и использовал его:

>>> df
   0  1  2  3  4  5
0  0  1  2  3  4  5
1  0  1  2  3  4  5
2  0  1  2  3  4  5
3  0  1  2  3  4  5
4  0  1  2  3  4  5
>>> ncol = len(df.columns)
>>> df.iloc[:,[0, ncol-1, ncol-2] + list(range(1,ncol-2))]
   0  5  4  1  2  3
0  0  5  4  1  2  3
1  0  5  4  1  2  3
2  0  5  4  1  2  3
3  0  5  4  1  2  3
4  0  5  4  1  2  3

2022 WebDevInsider