熊猫如何交换或重新排序列

时间:2018-11-04 13:17:27

标签: python pandas multiple-columns swap

我知道有一些方法可以交换python pandas中的列顺序。 假设我有以下示例数据集:

import pandas as pd    
employee = {'EmployeeID' : [0,1,2],
     'FirstName' : ['a','b','c'],
     'LastName' : ['a','b','c'],
     'MiddleName' : ['a','b', None],
     'Contact' : ['(M) 133-245-3123', '(F)a123@gmail.com', '(F)312-533-2442 jimmy234@gmail.com']}

df = pd.DataFrame(employee)

一种基本的操作方法是:

neworder = ['EmployeeID','FirstName','MiddleName','LastName','Contact']
df=df.reindex(columns=neworder)

但是,正如您所看到的,我只想交换两列。仅仅因为只有4列是可行的,但是如果我有100列怎么办?交换列或重新排序列的有效方法是什么?

可能有2种情况:

  1. 当您只想交换2列时。
  2. 要重新排列3列时。 (我很确定这种情况可以应用于3列以上。)

谢谢你们。

4 个答案:

答案 0 :(得分:2)

两列交换

cols = list(df.columns)
a, b = cols.index('LastName'), cols.index('MiddleName')
cols[b], cols[a] = cols[a], cols[b]
df = df[cols]

重新排序列交换(两次交换)

cols = list(df.columns)
a, b, c, d = cols.index('LastName'), cols.index('MiddleName'), cols.index('Contact'), cols.index('EmployeeID')
cols[a], cols[b], cols[c], cols[d] = cols[b], cols[a], cols[d], cols[c]
df = df[cols]

交换多个

现在取决于您如何使用列表片-

cols = list(df.columns)
cols = cols[1::2] + cols[::2]
df = df[cols]

答案 1 :(得分:2)

如果你想在开始时有一个固定的列列表,你可以这样做

cols = ['EmployeeID','FirstName','MiddleName','LastName']
df = df[cols + [c for c in df.columns if c not in cols]]

这会将这 4 列放在最前面,其余的保持不变(没有任何重复的列)。

答案 2 :(得分:1)

假设您当前的列顺序为[b,c,d,a],而您想将其排序为[a,b,c,d],则可以这样操作:

new_df = old_df[['a', 'b', 'c', 'd']]

答案 3 :(得分:1)

在遇到更大范围的相同问题时,我在以下链接处找到了一个非常优雅的解决方案:http://www.datasciencemadesimple.com/re-arrange-or-re-order-the-column-of-dataframe-in-pandas-python-2/ “按熊猫python中的列位置重新排列数据框的列。”

基本上,如果您将列顺序作为列表,则可以将其作为新的列顺序读取。

##### Rearrange the column of dataframe by column position in pandas python

df2=df1[df1.columns[[3,2,1,0]]]
print(df2)

就我而言,我有一个预先计算的列链接,该链接确定了我想要的新订单。如果此顺序被定义为L中的数组,则:

a_L_order = a[a.columns[L]]