Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在得到假人后重新排列列_Python 3.x_Pandas_One Hot Encoding - Fatal编程技术网

Python 3.x 在得到假人后重新排列列

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

在使用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      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]