我知道在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列呢?什么是交换或重新排序列的有效方法?
可能有两种情况:
1.当你只想交换两列时。
1.当你想要3列重新排序时。(我很肯定这种情况可以应用于3列以上。)
9条答案
按热度按时间pieyvz9o1#
假设你的当前列的顺序是[B,c,d,a],你想把它排序成[a,b,c,d],你可以这样做:
dgenwo3n2#
两列交换
重新排序列交换(2次交换)
交换多个
现在我们来看看如何使用列表切片-
2j4z5cfb3#
如果希望在开始时有一个固定的列列表,可以执行以下操作:
这将把这4列放在第一位,其余的保持不变(没有任何重复的列)。
92dk7w1h4#
当在更大的规模上面临同样的问题时,我在这个链接上遇到了一个非常优雅的解决方案:http://www.datasciencemadesimple.com/re-arrange-or-re-order-the-column-of-dataframe-in-pandas-python-2/在“Rearrange the column of dataframe by column position in pandas python”标题下。
基本上,如果你有列顺序作为一个列表,你可以读它作为新的列顺序。
在我的例子中,我有一个预先计算的列链接,它决定了我想要的新顺序。如果这个顺序被定义为L中的数组,那么:
ckocjqey5#
当您没有太多列并且不想列出列名时,对列进行重新排序的一种简洁方法是使用 .iloc[]。
jgovgodb6#
写入文件时
当 Dataframe 被写出到文件(例如CSV)时,列也可以被重新排序:
fruv7luv7#
我认为这样的函数对于控制列的位置非常有用:
一个简单的用例就像定义我们想要重新排序的列,例如,使用提供的DataFrame,如果我们想要这样做:
['EmployeeID', 'Contact', 'LastName', 'FirstName', 'MiddleName']
注意,我们只需要移动
Contact
和LastName
,因此我们可以很容易地得到结果:使用这种方法,我们可以根据需要重新排序任意多的列,我们只需要指定列的列表,然后应用示例中的函数。
rks48beu8#
根据需要定位pandas系列
pandas.iloc函数的第一个参数表示行,第二个参数表示列,因此我们给出了列的显示顺序列表。
ttcibm8c9#
这里有一个两行的解决方案,只要你知道你想要交换的列的名字,不管 Dataframe 的大小(不管有多少列)都可以工作。如果你的 Dataframe 中的两列是“col1”和“col2”(df):