1
votes

dplyr R arrange fonction équivalente dans les pandas

J'ai un bloc de données similaire à celui-ci, mon idée est d'organiser les lignes selon le vecteur ma_ordre , comme indiqué ci-dessous.

Code R:

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

Ma question est de savoir comment puis-je faire cela en python, y a-t-il une fonction dans pandas, équivalent dplyr :: arrange () ? p >

Code Python:

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


2 commentaires

Cette sortie de commande de arrange me semble incorrecte ... comment ça marche?


consultez les documents


3 Réponses :


1
votes

D'accord, je l'ai compris. Vous passez des index triés par arg à arrange . Vous pouvez faire la même chose avec iloc , mais vous devrez argsort vos index pour obtenir son inverse.

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


0 commentaires

1
votes

Je ne suis pas sûr de la bonne fonction.

contourner:

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 commentaires

1
votes

Vérifier avec

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 commentaires