Python 数据帧排序_值设置默认升序=False
是否可以定义一个属性来始终设置sort_值(升序=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) 您不能修改该函数。但
经常按降序使用它,然后希望设置默认行为。您可以为此制作自己的包装器
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