Сортировка столбов панд на каждый ряд - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь отсортировать столбцы панды в каждом ряду.Рассмотрим этот фрейм данных df:

X C1 C2 C3 C4 Y Z
A 11 15 12 13 A1 A2
B 21 25 22 23 B1 B2
C 31 35 32 33 C1 C2

Я пытаюсь отсортировать столбцы в порядке возрастания C1-C4 в каждой строке таким образом, чтобы конечный фрейм данных выглядел так:

X C1 C2 C3 C4 Y Z
A 11 12 13 15 A1 A2
B 21 22 23 25 B1 B2
C 31 32 33 35 C1 C2

Я посмотрелдо панд sort_values() но с трудом справляюсь.Надеюсь, кто-нибудь может показать мне некоторые трюки.Я пытаюсь отсортировать только несколько столбцов, а не все в каждой строке.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Используйте numpy.sort для сортировки по всем строкам:

cols = ['C1','C2','C3','C4']
df[cols] = np.sort(df[cols], axis=1)
print (df)
   X  C1  C2  C3  C4   Y   Z
0  A  11  12  13  15  A1  A2
1  B  21  22  23  25  B1  B2
2  C  31  32  33  35  C1  C2

Если возможно, сортируйте по индексу 0:

cols = ['C1','C2','C3','C4']
df[cols] = df[cols].sort_values(0, axis=1)
#thanks @pygo for another solution
df[cols].sort_values(0, axis=1, inplace=True)
print (df)
   X  C1  C2  C3  C4   Y   Z
0  A  11  12  13  15  A1  A2
1  B  21  22  23  25  B1  B2
2  C  31  32  33  35  C1  C2

Разница между решениямис измененным входным фреймом данных:

print (df)
   X  C1  C2  C3  C4   Y   Z
0  A  11  15  12  13  A1  A2
1  B   2   1   5   4  B1  B2
2  C  31  35  32  33  C1  C2

cols = ['C1','C2','C3','C4']
df[cols] = np.sort(df[cols], axis=1)
print (df)
   X  C1  C2  C3  C4   Y   Z
0  A  11  12  13  15  A1  A2
1  B   1   2   4   5  B1  B2
2  C  31  32  33  35  C1  C2

cols = ['C1','C2','C3','C4']
df[cols] = df[cols].sort_values(0, axis=1)
print (df)
   X  C1  C2  C3  C4   Y   Z
0  A  11  12  13  15  A1  A2
1  B   2   5   4   1  B1  B2
2  C  31  32  33  35  C1  C2
0 голосов
/ 20 ноября 2018

Вы можете использовать pandas функцию sort_values(), как показано ниже:

In [331]: df
Out[331]: 
   X  C1  C2  C3  C4    Y Z
0  A  11  15  12  13  A1 A2
1  B  21  25  22  23  B1 B2
2  C  31  35  32  33  C1 C2

In [332]: df.sort_values(['C1','C2','C3','C4'])
Out[332]: 
   X  C1  C2  C3  C4    Y Z
0  A  11  15  12  13  A1 A2
1  B  21  25  22  23  B1 B2
2  C  31  35  32  33  C1 C2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...