Python 3.x 在得到假人后重新排列列
在使用df=pd.get_假人(df,columns=['D'])之后 有没有一种方法,在不使用df[[a'、'B'、'C'、'D_Califorina'、'D_New York'、'D_Florida'、'E']的情况下,输出是这样的Python 3.x 在得到假人后重新排列列,python-3.x,pandas,one-hot-encoding,Python 3.x,Pandas,One Hot Encoding,在使用df=pd.get_假人(df,columns=['D'])之后 有没有一种方法,在不使用df[[a'、'B'、'C'、'D_Califorina'、'D_New York'、'D_Florida'、'E']的情况下,输出是这样的 A B C E D_New York D_California D_Florida 0 165349.20 136897.80 471
A B C E D_New York D_California D_Florida
0 165349.20 136897.80 471784.10 192261.83 0 0 1
1 162597.70 151377.59 443898.53 191792.06 1 0 0
2 153441.51 101145.55 407934.54 191050.39 0 1 0
3 144372.41 118671.85 383199.62 182901.99 0 0 1
4 142107.34 91391.77 366168.42 166187.94 0 1 0
通过使用
sort\u索引
A B C D_New York D_California D_Florida E
0 165349.20 136897.80 471784.10 0 0 1 192261.83
1 162597.70 151377.59 443898.53 1 0 0 191792.06
2 153441.51 101145.55 407934.54 0 1 0 191050.39
3 144372.41 118671.85 383199.62 0 0 1 182901.99
4 142107.34 91391.77 366168.42 0 1 0 166187.94
编辑:。。。。。使用dict
和lambda
df.sort_index(axis=1)
Out[813]:
A B C D_California D_Florida D_NewYork \
0 165349.20 136897.80 471784.10 0 0 1
1 162597.70 151377.59 443898.53 1 0 0
2 153441.51 101145.55 407934.54 0 1 0
3 144372.41 118671.85 383199.62 0 0 1
4 142107.34 91391.77 366168.42 0 1 0
E
0 192261.83
1 191792.06
2 191050.39
3 182901.99
4 166187.94
可能未按排序顺序排列的列的通用解决方案:
找到相应的dummify和concat列的位置
A=dict(zip(df.columns,list(range(0,df.shape[1]))))
#build a dict A store the order of original df
df1=pd.get_dummies(df, columns=['State'])
#get your df
youroder=list(df1)
#new disorder column name
youroder.sort(key=lambda val: A[val.split(sep='_')[0]])
# sort it
df1[youroder]
Out[842]:
R&D Spend Administration Marketing Spend State_California \
0 165349.20 136897.80 471784.10 0
1 162597.70 151377.59 443898.53 1
2 153441.51 101145.55 407934.54 0
3 144372.41 118671.85 383199.62 0
4 142107.34 91391.77 366168.42 0
State_Florida State_NewYork Profit(E)
0 0 1 192261.83
1 0 0 191792.06
2 1 0 191050.39
3 0 1 182901.99
4 1 0 166187.94
不确定是否有更好的方法,但这会起作用
j = df.columns.get_loc('D')
left = df.iloc[:, :j]
dumb = pd.get_dummies(df[['D']])
rite = df.iloc[:, j+1:]
pd.concat([left, dumb, rite], axis=1)
A B C D_California D_Florida D_New York E
0 165349.20 136897.80 471784.10 0 0 1 192261.83
1 162597.70 151377.59 443898.53 1 0 0 191792.06
2 153441.51 101145.55 407934.54 0 1 0 191050.39
3 144372.41 118671.85 383199.62 0 0 1 182901.99
4 142107.34 91391.77 366168.42 0 1 0 166187.94
看起来您需要
df.sort_index(axis=1)
假设列名的字母顺序与我的示例中的不同,是否有其他方法?这些分别是原始列名:研发支出、管理、营销支出、状态、利润(E)。我想把它们安排成:研发支出、管理支出、营销支出、加利福尼亚州、纽约州、佛罗里达州、利润(E)@ZaleGoldart我所能想到的就是把原来的df分成两半,然后把它们收回来
j = df.columns.get_loc('D')
left = df.iloc[:, :j]
dumb = pd.get_dummies(df[['D']])
rite = df.iloc[:, j+1:]
pd.concat([left, dumb, rite], axis=1)
A B C D_California D_Florida D_New York E
0 165349.20 136897.80 471784.10 0 0 1 192261.83
1 162597.70 151377.59 443898.53 1 0 0 191792.06
2 153441.51 101145.55 407934.54 0 1 0 191050.39
3 144372.41 118671.85 383199.62 0 0 1 182901.99
4 142107.34 91391.77 366168.42 0 1 0 166187.94
col = ['R&D Spend', 'Administration', 'Marketing Spend', 'State_California', 'State_New York', 'State_Florida', 'Profit(E)']
df=df.loc[:, col]