Переупорядочить ваш фрейм данных, переставив один столбец - PullRequest
0 голосов
/ 07 сентября 2018

Имея фрейм данных, который выглядит следующим образом:

import pandas as pd 

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']},
                    index=[0, 1, 2, 3])

Интересно, как изменить порядок фреймов данных при наличии другого порядка в одном столбце, который нужно применить ко всем другим, например, изменивСтолбец в этом примере?

 df2 = pd.DataFrame({'A': ['A3', 'A0', 'A2', 'A1'],
                     'B': ['B3', 'B0', 'B2', 'B1'],
                     'C': ['C3', 'C0', 'C2', 'C1'],
                     'D': ['D3', 'D0', 'D2', 'D1']},
                     index=[0, 1, 2, 3])

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Вы имели в виду сортировку 1 конкретной строки? если это так, используйте:

df1.iloc[:1] = df1.iloc[:1].sort_index(axis=1,ascending=False)
print(df1)

для всех столбцов используйте:

df1 = df1.sort_index(axis=0,ascending=False)

для определенных столбцов используйте функцию iloc.

0 голосов
/ 07 сентября 2018

Вы можете использовать индексирование через set_index, reindex и reset_index. Предполагается, что ваши значения в A уникальны, и это единственный случай, когда такое преобразование имело бы смысл.

L = ['A3', 'A0', 'A2', 'A1']

res = df1.set_index('A').reindex(L).reset_index()

print(res)

    A   B   C   D
0  A3  B3  C3  D3
1  A0  B0  C0  D0
2  A2  B2  C2  D2
3  A1  B1  C1  D1
0 голосов
/ 07 сентября 2018

Вы можете использовать параметр ключа из отсортированной функции:

import pandas as pd

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']},
                   index=[0, 1, 2, 3])


key = {'A3': 0, 'A0': 1, 'A2' : 2, 'A1': 3}
df1['A'] = sorted(df1.A, key=lambda e: key.get(e, 4))

print(df1)

выход

    A   B   C   D
0  A3  B0  C0  D0
1  A0  B1  C1  D1
2  A2  B2  C2  D2
3  A1  B3  C3  D3

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

UPDATE

Если вы хотите изменить порядок других столбцов на основе нового порядка A, вы можете попробовать что-то вроде этого:

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']},
                   index=[0, 1, 2, 3])

df2 = pd.DataFrame({'A': ['A3', 'A0', 'A2', 'A1'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']},
                   index=[0, 1, 2, 3])

key = [df1.A.values.tolist().index(k) for k in df2.A]
df2.B = df2['B'][key].tolist()
print(df2)

выход

    A   B   C   D
0  A3  B3  C0  D0
1  A0  B0  C1  D1
2  A2  B2  C2  D2
3  A1  B1  C3  D3

Чтобы изменить все столбцы, просто примените вышеуказанное для каждого столбца. Что-то вроде этого:

for column in df2.columns.values:
    if column != 'A':
        df2[column] = df2[column][key].tolist()
print(df2)

выход

    A   B   C   D
0  A3  B3  C3  D3
1  A0  B0  C0  D0
2  A2  B2  C2  D2
3  A1  B1  C1  D1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...