Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧排序_值设置默认升序=False_Python_Pandas - Fatal编程技术网

Python 数据帧排序_值设置默认升序=False

Python 数据帧排序_值设置默认升序=False,python,pandas,Python,Pandas,是否可以定义一个属性来始终设置sort_值(升序=False)? 经常按降序使用它,然后希望设置默认行为。您可以为此制作自己的包装器 def sort_values(df, *args, **kwargs): if len(args) < 2 and "ascending" not in kwargs: kwargs["ascending"] = False return df.sort_values(*args, **kwargs) 您不能修改该函数。但

是否可以定义一个属性来始终设置sort_值(升序=False)?
经常按降序使用它,然后希望设置默认行为。

您可以为此制作自己的包装器

def sort_values(df, *args, **kwargs):
    if len(args) < 2 and "ascending" not in kwargs:
        kwargs["ascending"] = False
    return df.sort_values(*args, **kwargs)

您不能修改该函数。但是一个好的替代方法是将其包装在您自己的函数中

def sort_values(df, sort_by):
    return df.sort_values(ascending=False, by=sort_by)
sort_values(data, ['col1']

您可以将标准的
pd.DataFrame
子类化,并仅重新定义
.sort\u值
方法:

class MyDataFrame(pd.DataFrame):
    def sort_values(self,by,axis=0,ascending=False,inplace=False, 
                    kind='quicksort',na_position='last'):
        return super().sort_values(by,axis,ascending,inplace,kind)

foo = MyDataFrame({'z': [1,2,3,4]})
foo.sort_values('z')
#   z
#3  4
#2  3
#1  2
#0  1
foo.sort_values('z',ascending=True)
#   z
#0  1
#1  2
#2  3
#3  4

另一个选项是声明代码开头经常使用的设置,并将它们作为KWARG传递

然而,就我个人而言,每次我都会写出来

import pandas as pd
p = {"ascending":False, "inplace":True}


df = pd.DataFrame({
    'col1': [1,6,2,5,9,3]
})

df.sort_values(by='col1', **p)

print(df)
返回:

   col1
4     9
1     6
3     5
5     3
2     2
0     1

我强烈建议不要这样做。因为您需要对Pandas源代码有深入的了解,这会让其他用户感到困惑。而且它不能保证跨版本工作。
sort_值
需要大量参数,其中一些是必需的。虽然你的建议有道理,但从技术上讲是不正确的,还是不好。其中一个参数是必需的。检查
帮助(df.sort\u值)
。但是您是否费心测试了它?因为它肯定不起作用。为什么不尝试执行自己的示例
print(sort_values(my_df))
?哦,这是示例用法中的一个输入错误:)否决答案不是一个大问题。你可以在评论中纠正我。我会更新的。谢谢尝试对值(数据,['col1'],axis=1)进行排序。或使用关键字参数进行任何其他调用。我不认为这适用于所有情况。例如,
foo.sort\u值(数据,1)
。这里
axis=1
@RahulGoswami同意,*需要参数。嗯,这很有趣。对不起,但还是有一个小小的警告。如果
df.sort\u值(数据,1,True)
,该怎么办。那么我们如何设置
升序=True
。我想我们可以检查
如果len(args)<2和'ascending'不在kwargs中:kwargs['ascending']=False
。我不知道有没有更好的办法。一些想法?@RahulGoswami冷静的观察,这使得实现更加简单!
   col1
4     9
1     6
3     5
5     3
2     2
0     1