我有一个类似于此的数据框,我的想法是根据向量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中执行此操作,pandas中是否有任何函数,相当于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
你正在传递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
检查
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
解决方法:
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)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。