假设我想在Pandas中对数据框进行排序,而我的数据框看起来像这样
First Name Last Name Street Address Type
0 Joe Smith 123 Main St. Property Address
1 Gregory Stanton 124 Main St. X Old Property Address
2 Phill Allen 38 Maple St. Alternate Address
3 Joe Smith PO Box 3165 Alternate Address
4 Xi Dong 183 Main St. Property Address
5 Phill Allen 128 Main St. Property Address
我想首先按姓氏对数据框进行排序,以使它看起来像这样:
First Name Last Name Street Address Type
0 Phill Allen 38 Maple St. Alternate Address
1 Phill Allen 128 Main St. Property Address
2 Xi Dong 183 Main St. Property Address
3 Joe Smith 123 Main St. Property Address
4 Joe Smith PO Box 3165 Alternate Address
5 Gregory Stanton 124 Main St. X Old Property Address
现在,对于每个人,我希望将属性地址更改为替代地址之前(如果该人同时具有属性和替代地址),以便数据框如下所示:
First Name Last Name Street Address Type
0 Phill Allen 128 Main St Property Address
1 Phill Allen 38 Maple St. Alternate Address
2 Xi Dong 183 Main St. Property Address
3 Joe Smith 123 Main St. Property Address
4 Joe Smith PO Box 3165 Alternate Address
5 Gregory Stanton 124 Main St. X Old Property Address
请注意,Phill Allen的条目已在上面的数据框中切换,因为他的备用地址位于他的财产地址之前。 我的代码如下:
duplicates = df[df.duplicated(['Last Name'], keep=False)]
duplicates = duplicates.sort_values(['Last Name'], ascending = True)
duplicates = duplicates.sort_values(['Address Type'], ascending = True)
我已经尝试使用
duplicates = df.sort_values(['last', 'Address Type'], ascending = True)
这是行不通的,因为“地址类型”可以有很多不同的东西,而不仅仅是主要/备用,并且当以升/降序排序时,此代码不一定总是可以工作。
但是它不会以正确的顺序切换属性地址和备用地址,因为python首先按姓氏对数据帧进行排序,然后根据地址类型对数据帧求助。我正在寻找的代码将首先按姓氏排序,然后根据这些姓氏排序,然后按地址类型排序。任何帮助,将不胜感激。 谢谢!
答案 0 :(得分:0)
您可以按多列排序。只需将两列都放在列表中即可。
duplicates = duplicates.sort_values(['Last Name', 'Address Type'], ascending = True)