Yun*_*ang 3 python swap multiple-columns pandas
我知道有一些方法可以在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)
Run Code Online (Sandbox Code Playgroud)
一种基本的方法是:
neworder = ['EmployeeID','FirstName','MiddleName','LastName','Contact']
df=df.reindex(columns=neworder)
Run Code Online (Sandbox Code Playgroud)
但是,如您所见,我只想交换两列。仅仅因为只有4列是可行的,但是如果我有100列怎么办?交换列或重新排序列的有效方法是什么?
可能有2种情况:
感谢大伙们。
Viv*_*gan 21
两列交换
cols = list(df.columns)
a, b = cols.index('LastName'), cols.index('MiddleName')
cols[b], cols[a] = cols[a], cols[b]
df = df[cols]
Run Code Online (Sandbox Code Playgroud)
重新排序列交换(2 次交换)
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]
Run Code Online (Sandbox Code Playgroud)
交换多个
现在归结为如何使用列表切片 -
cols = list(df.columns)
cols = cols[1::2] + cols[::2]
df = df[cols]
Run Code Online (Sandbox Code Playgroud)
Jea*_* T. 16
如果你想在开始时有一个固定的列列表,你可以这样做
cols = ['EmployeeID','FirstName','MiddleName','LastName']
df = df[cols + [c for c in df.columns if c not in cols]]
Run Code Online (Sandbox Code Playgroud)
这会将这 4 列放在第一位,其余的保持不变(没有任何重复的列)。
小智 12
当在更大范围内面临同样的问题时,我在这个链接中遇到了一个非常优雅的解决方案:http ://www.datasciencemadesimple.com/re-arrange-or-re-order-the-column-of-dataframe-in- pandas-python-2/标题下的“按 pandas python 中的列位置重新排列数据帧的列”。
基本上,如果您将列顺序作为列表,您可以将其读取为新的列顺序。
##### Rearrange the column of dataframe by column position in pandas python
df2=df1[df1.columns[[3,2,1,0]]]
print(df2)
Run Code Online (Sandbox Code Playgroud)
就我而言,我有一个预先计算的列链接来确定我想要的新顺序。如果这个顺序被定义为 L 中的数组,那么:
a_L_order = a[a.columns[L]]
Run Code Online (Sandbox Code Playgroud)
假设您当前的列顺序为[b,c,d,a],并且想要将其排序为[a,b,c,d],则可以通过以下方式进行操作:
new_df = old_df[['a', 'b', 'c', 'd']]
Run Code Online (Sandbox Code Playgroud)