4 Вопрос: позиционировать или переместить столбец панды в определенный индекс столбца

вопрос создан в Wed, May 8, 2019 12:00 AM

Я погуглил, но, похоже, не могу найти ответ на этот вопрос, или, может быть, я задаю вопрос неправильно?

У меня есть DF mydataframe, и у него есть несколько столбцов (более 75 столбцов) с числовым индексом по умолчанию:

Col1 Col2 Col3 ... Coln

Мне нужно расположить /изменить позицию следующим образом:

Col1 Col3 Col2 ... Coln 

Я могу получить индекс Col2, используя:

mydataframe.columns.get_loc("Col2")

но я, похоже, не могу понять, как поменять местами, не перечисляя вручную все столбцы, а затем вручную переставляя их в списке.

    
1
4 ответа                              4                         

Как продолжить:

  1. хранить имена столбцов в списке;
  2. поменяйте местами имена в этом списке;
  3. примените новый порядок к фрейму данных.

код:

l = list(df)

i1, i2 = l.index('Col2'), l.index('Col3')
l[i2], l[i1] = l[i1], l[i2]

df = df[l]
    
1
2019-05-08 16: 27: 45Z
  1. Мне удалось расширить это, чтобы соответствовать моим потребностям. Спасибо.
    2019-05-09 14: 55: 30Z

Try:

new_cols = [Col1, Col3, Col2] + df.columns[3:]

df = df[new_cols]
    
1
2019-05-08 15: 56: 09Z

Я представляю, что вы хотите то, что предполагает @sentence. Вы хотите поменять местами 2 столбца независимо от того, где они находятся.

Это творческий подход:

  1. Создайте словарь, который определяет, какие столбцы переключаются на какие.
  2. Определите функцию, которая принимает имя столбца и возвращает порядок.
  3. Используйте эту функцию в качестве ключа для сортировки.
d = {'Col3': 'Col2', 'Col2': 'Col3'}
k = lambda x: df.columns.get_loc(d.get(x, x))

df[sorted(df, key=k)]

   Col0  Col1  Col3  Col2  Col4
0     0     1     3     2     4
1     5     6     8     7     9
2    10    11    13    12    14
3    15    16    18    17    19
4    20    21    23    22    24

Настройка

df = pd.DataFrame(
    np.arange(25).reshape(5, 5)
).add_prefix('Col')
    
0
2019-05-08 16: 46: 25Z

Использование np.r_ для создания массива индекса столбца:

Данный пример выглядит следующим образом:

df:
   col1  col2  col3  col4  col5  col6  col7  col8  col9  col10
0     0     1     2     3     4     5     6     7     8      9
1    10    11    12    13    14    15    16    17    18     19


i, j = df.columns.slice_locs('col2', 'col10')
df[df.columns[np.r_[:i, i+1, i, i+2:j]]]

Out[142]:
   col1  col3  col2  col4  col5  col6  col7  col8  col9  col10
0     0     2     1     3     4     5     6     7     8      9
1    10    12    11    13    14    15    16    17    18     19
    
0
2019-05-08 18: 02: 16Z
источник размещен Вот