Dplyr R упорядочить эквивалент функции в пандах - PullRequest
0 голосов
/ 23 января 2019

У меня есть кадр данных, похожий на этот, моя идея состоит в том, чтобы расположить строки в соответствии с вектором my_order , как показано ниже.

R код:

df = data.frame(A = c("apple","cherry","orange","banana"), B = c(25,37,15,28))
df
       A  B
1  apple 25
2 cherry 37
3 orange 15
4 banana 28

my_order = c(2,3,4,1)
dplyr::arrange(df,my_order)
       A  B
1 banana 28
2  apple 25
3 cherry 37
4 orange 15

У меня вопрос, как я могу сделать это в Python, есть ли какая-нибудь функция в пандах, эквивалентная dplyr::arrange()?

Код Python:

import pandas as pd

df = pd.DataFrame({'A': ["apple","cherry","orange","banana"], 'B': [25,37,15,28]})
print(df)
        A   B
0   apple  25
1  cherry  37
2  orange  15
3  banana  28

my_order = [1,2,3,0]
df.iloc[my_order]
        A   B
1  cherry  37
2  orange  15
3  banana  28
0   apple  25

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Я не уверен насчет правильной функции.

Обойти:

import pandas as pd

df = pd.DataFrame({'A': ["apple","cherry","orange","banana"], 'B': [25,37,15,28]})

print(df)

df['index']=[2,3,4,1]
df.set_index('index',inplace=True)
df.sort_index(inplace=True)

print(df)

0 голосов
/ 23 января 2019

Проверка с

df.loc[pd.Series(my_order,index=df.index).sort_values().index]
Out[42]: 
        A   B
3  banana  28
0   apple  25
1  cherry  37
2  orange  15
0 голосов
/ 23 января 2019

Хорошо, я понял это.Вы передаете argsorted индексы на arrange.Вы можете сделать то же самое с iloc, но вам придется argsort ваши индексы, чтобы получить обратное значение.

my_order = [2,3,4,1]
df.iloc[pd.np.argsort(my_order)]

        A   B
3  banana  28
0   apple  25
1  cherry  37
2  orange  15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...