Rom*_*man 63 python sorting dataframe pandas
我有以下数据框:
df = pandas.DataFrame([{'c1':3,'c2':10},{'c1':2, 'c2':30},{'c1':1,'c2':20},{'c1':2,'c2':15},{'c1':2,'c2':100}])
Run Code Online (Sandbox Code Playgroud)
或者,以人类可读的形式:
c1 c2
0 3 10
1 2 30
2 1 20
3 2 15
4 2 100
Run Code Online (Sandbox Code Playgroud)
以下排序命令按预期工作:
df.sort(['c1','c2'], ascending=False)
Run Code Online (Sandbox Code Playgroud)
输出:
c1 c2
0 3 10
4 2 100
1 2 30
3 2 15
2 1 20
Run Code Online (Sandbox Code Playgroud)
但是以下命令:
df.sort(['c1','c2'], ascending=[False,True])
Run Code Online (Sandbox Code Playgroud)
结果是
c1 c2
2 1 20
3 2 15
1 2 30
4 2 100
0 3 10
Run Code Online (Sandbox Code Playgroud)
这不是我所期望的.我希望第一列中的值从最大到最小排序,如果第一列中有相同的值,则按第二列中的升序值排序.
有人知道它为什么不能按预期工作吗?
添加
这是复制粘贴:
>>> df.sort(['c1','c2'], ascending=[False,True])
c1 c2
2 1 20
3 2 15
1 2 30
4 2 100
0 3 10
Run Code Online (Sandbox Code Playgroud)
fal*_*tru 71
DataFrame.sort已弃用; 用DataFrame.sort_values.
>>> df.sort_values(['c1','c2'], ascending=[False,True])
c1 c2
0 3 10
3 2 15
1 2 30
4 2 100
2 1 20
>>> df.sort(['c1','c2'], ascending=[False,True])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/ampawake/anaconda/envs/pseudo/lib/python2.7/site-packages/pandas/core/generic.py", line 3614, in __getattr__
return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'sort'
Run Code Online (Sandbox Code Playgroud)
Hon*_*zaB 25
使用sort可能会导致警告消息.见github讨论.所以你可能想在这里使用sort_values文档
然后你的代码看起来像这样:
df = df.sort_values(by=['c1','c2'], ascending=[False,True])
Run Code Online (Sandbox Code Playgroud)
dataframe.sort()方法是 - 所以我的理解 - 在pandas> 0.18中弃用了.为了解决您的问题,您应该使用dataframe.sort_values()代替:
f.sort_values(by=["c1","c2"], ascending=[False, True])
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
c1 c2
3 10
2 15
2 30
2 100
1 20
Run Code Online (Sandbox Code Playgroud)
就我而言,接受的答案不起作用:
f.sort_values(by=["c1","c2"], 升序=[假,真])
只有以下按预期工作:
f = f.sort_values(by=["c1","c2"], ascending=[False, True])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
148099 次 |
| 最近记录: |