Перемещение столбца данных и изменение порядка столбцов - PullRequest
0 голосов
/ 02 июня 2018

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

date           A    B     C   D    E    F      G          H       I
07/03/2016  2.08    1   NaN NaN 1029    2   2.65    4861688 -0.0388
08/03/2016  2.20    1   NaN NaN 1089    2   2.20    5770819 -0.0447
:                                                                 :   

09/03/2016  2.14    1   NaN NaN 1059    2   2.01    5547959 -0.0514
10/03/2016  2.25    1   NaN NaN 1089    2   1.95    4064482 -0.0520

Есть ли способ изменить порядок столбцов, чтобы столбец F перемещался в положение, котороепосле столбца H. Получившийся df будет выглядеть так:

date           A    B     C   D    E    F      G          H  F       I
07/03/2016  2.08    1   NaN NaN 1029    2   2.65    4861688  2 -0.0388
08/03/2016  2.20    1   NaN NaN 1089    2   2.20    5770819  2 -0.0447
:                                                                    :   

09/03/2016  2.14    1   NaN NaN 1059    2   2.01    5547959  2 -0.0514
10/03/2016  2.25    1   NaN NaN 1089    2   1.95    4064482  2 -0.0520

Ответы [ 5 ]

0 голосов
/ 18 декабря 2018

Не для автора этого вопроса, но, возможно, для других.

list = df.columns.tolist() # list the columns in the df
list.insert(8, list.pop(list.index('F'))) # Assign new position (i.e. 8) for "F" 
df = df.reindex(columns= list) # Now move 'F' to ist new position
0 голосов
/ 03 июня 2018

Это один из способов через pd.DataFrame.iloc, который использует индексацию на основе целочисленного местоположения для выбора по позиции.

Это также мягкое напоминание о том, что целочисленная индексация pandas основана наnumpy.

import pandas as pd
import numpy as np

df = pd.DataFrame(columns=list('ABCDEFGHI'))

cols = np.insert(np.arange(df.shape[1]),
                 df.columns.get_loc('H')+1,
                 df.columns.get_loc('F'))

res = df.iloc[:, cols]

print(res)

Empty DataFrame
Columns: [A, B, C, D, E, F, G, H, F, I]
Index: []
0 голосов
/ 02 июня 2018

Используйте это:

df = df[['date','A','B','C','D','E','F','G','H','F','I']]

--- Редактировать

columnsName = list(df.columns)
F, H = columnsName.index('F'), columnsName.index('H')
columnsName[F], columnsName[H] = columnsName[H],columnsName[F]
df = df[columnsName]
0 голосов
/ 02 июня 2018

Используйте df.insert с df.columns.get_loc для динамического определения позиции вставки.

col = df['F'] # df.pop('F') # if you want it removed
df.insert(df.columns.get_loc('H') + 1, col.name, col, allow_duplicates=True)

df
         date     A  B   C   D     E  F     G        H  F       I
0  07/03/2016  2.08  1 NaN NaN  1029  2  2.65  4861688  2 -0.0388
1  08/03/2016  2.20  1 NaN NaN  1089  2  2.20  5770819  2 -0.0447
...
0 голосов
/ 02 июня 2018

Вы можете использовать:

df.reindex(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'F', 'I'], axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...