Как отсортировать строки в пандах на месте для данной группы? - PullRequest
0 голосов
/ 06 октября 2019

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

Данные -

A         B          C
---------------------------
1         1          1
1         1          2
1         1          3
2         1          3
2         1          1
2         1          2
1         2          2
1         2          1
1         2          3

И мой ожидаемый вывод:

A         B          C
---------------------------
1         1          1
1         1          2
1         1          3
2         1          1
2         1          2
2         1          3
1         2          1
1         2          2
1         2          3

Оригинальные данные выглядят намного сложнее с другими столбцами. Это просто упрощает версию этих данных. Поэтому в основном я хочу отсортировать данные для Col C для комбинированного уникального ключа (Col A и B).

В настоящее время я пытаюсь сделать следующее:

contentIDs = data.B.unique()
for iD in contentIDs:
    slots = data[data.B == iD].A.unique()

    for s in slots:
        slotData = data[(data.A == s) & (data.B ==  iD)]
        sortedData = slotData.sort_values(['A', 'B', 'C'])

    #Loop throug data to get to the index of sorted data and then replace unsorted data with sorted data.

Я думал, что может быть лучший способ сделать это. Итак, спрашиваю, есть ли лучший путь, прежде чем я продолжу свою циклическую логику. Что выглядит довольно плохо, если вы делаете простую вещь, подобную этой.

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

Ответы [ 2 ]

1 голос
/ 06 октября 2019

IIUC

df.sort_values(['B','A','C'])
   A  B  C
0  1  1  1
1  1  1  2
2  1  1  3
4  2  1  1
5  2  1  2
3  2  1  3
7  1  2  1
6  1  2  2
8  1  2  3
1 голос
/ 06 октября 2019

Использование GroupBy.apply :

df.groupby(['A','B'],sort=False)['C'].apply(lambda x:x.sort_values()).reset_index(level=['A','B'])

   A  B  C
0  1  1  1
1  1  1  2
2  1  1  3
4  2  1  1
5  2  1  2
3  2  1  3
7  1  2  1
6  1  2  2
8  1  2  3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...