dplyr R在熊猫中的等效排列功能

时间:2019-01-22 21:18:22

标签: python pandas dplyr

我有一个与此类似的数据框,我的想法是根据向量 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

4 个答案:

答案 0 :(得分:1)

好的,我知道了。您正在将实参索引传递给gluLookAt()。您可以使用arrange做同样的事情,但是您必须iloc来使索引取反。

argsort

答案 1 :(得分:1)

我不确定功能是否正确。

解决方法:

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)

答案 2 :(得分:1)

检查

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

答案 3 :(得分:1)

现在您无需学习 Pandas 的 API 即可将您的 R 代码转换为 Python 代码!

使用datar

>>> from datar import f
>>> from datar.tibble import tibble
>>> from datar.dplyr import arrange
>>> df = tibble(A = ["apple","cherry","orange","banana"], B = [25,37,15,28])
>>> df
        A   B
0   apple  25
1  cherry  37
2  orange  15
3  banana  28
>>> my_order = [2,3,4,1]
>>> df >> arrange(my_order)
        A   B
0  banana  28
1   apple  25
2  cherry  37
3  orange  15

我是包的作者。如果您有任何问题,请随时提交问题。