Сортировать или группировать фрейм данных в Python, используя заданную строку - PullRequest
0 голосов
/ 26 мая 2018

Я дал фрейм данных

    Id    Direction Load    Unit
1   CN05059815  LoadFWD 0,0 NaN
2   CN05059815  LoadBWD 0,0 NaN
4   ....
    ....

и указанный список.

list =['CN05059830','CN05059946','CN05060010','CN05060064' ...]

Я хотел бы отсортировать или сгруппировать данные по заданному элементусписок.

Например, новые данные будут иметь точно такой же вид, что и список.Первый столбец начинается с CN05059815, который не принадлежит списку, затем второй CN05059830 CN05059946 ... оба принадлежат списку.С остальными другими данными

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Рассмотрим приведенный ниже подход и пример:

df = pd.DataFrame({
    'col': ['a', 'b', 'c', 'd', 'e']
})
list_ = ['d', 'b', 'a']
print(df)

Вывод:

    col
0   a
1   b
2   c
3   d
4   e

Затем для сортировки df со списком и его порядком:

df.reindex(df.assign(dummy=df['col'])['dummy'].apply(lambda x: list_.index(x) if x in list_ else -1).sort_values().index)

Вывод:

   col
2   c
4   e
3   d
1   b
0   a
0 голосов
/ 26 мая 2018

Один из способов - использовать Категориальные данные .Вот минимальный пример:

# sample dataframe
df = pd.DataFrame({'col': ['A', 'B', 'C', 'D', 'E', 'F']})

# required ordering
lst = ['D', 'E', 'A', 'B']

# convert to categorical
df['col'] = df['col'].astype('category')

# set order, adding values not in lst to the front
order = list(set(df['col']) - set(lst)) + lst

# attach ordering information to categorical series
df['col'] = df['col'].cat.reorder_categories(order)

# apply ordering
df = df.sort_values('col')

print(df)

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