如何同时对熊猫数据框中的列进行排序[重复]
Posted
技术标签:
【中文标题】如何同时对熊猫数据框中的列进行排序[重复]【英文标题】:How to simultaneously sort columns in pandas dataframe [duplicate] 【发布时间】:2019-01-16 03:33:44 【问题描述】:假设我想在 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 首先按姓氏对数据帧进行排序,然后根据地址类型对其进行排序。我正在寻找将首先按姓氏排序并基于这些姓氏,然后按地址类型排序的代码。任何帮助,将不胜感激。 谢谢!
【问题讨论】:
概括地说,您可以将Address Type
转换为有序分类,然后按您的 2 列排序:df['Address Type'] = pd.Categorical(df['Address Type'],categories = ['Property Address','Alternate Address'],ordered=True)
,然后是 df.sort_values(['Last Name', 'Address Type'], inplace=True)
【参考方案1】:
您可以按多列排序。只需将两列都放在列表中即可。
duplicates = duplicates.sort_values(['Last Name', 'Address Type'], ascending = True)
【讨论】:
不幸的是,我已经尝试过这个解决方案,但它不起作用。 @SterlingBhollah 你试过duplicates.sort_values(['Last Name', 'Address Type'], ascending=[True, False])
,因为“地址类型”不是升序的。
@SterlingBhollah 发生了什么?
@RCA 我已经更新了我的问题以使其更清楚。我为混乱道歉。但是,地址类型并不总是二进制(属性/备用),有时它会是很多东西。例如,我将始终拥有物业地址,但有时我会有备用联系人或联系人:备用地址代替备用地址。我本质上是在寻找将财产地址放在首位的东西,然后在连续的行中寻找其他不是财产地址的东西。以上是关于如何同时对熊猫数据框中的列进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章