如何重置多列的索引以匹配两个数据帧?

时间:2018-09-25 04:48:27

标签: python pandas performance dataframe

我有两个分别名为dfdf2的数据框。对于列iddfdf2包含相同种类的元素,但是元素的顺序不同。现在,我想合并dfdf2,并保持id的列df的顺序不变。

import pandas as pd 
import numpy as np 
df=pd.DataFrame({'id':['b','c','a','f','e','d']})
df2=pd.DataFrame(np.arange(240).reshape((6,40)),columns=[n for n in range(40)])
df2=pd.concat([df2,pd.DataFrame({'id':['a','b','c','d','e','f']})],axis=1)

Input:

df
   id
0  b
1  c
2  a
3  f
4  e
5  d

df2
      0    1    2    3    4    5    6    7    8    9 ...   31   32   33   34  \
0    0    1    2    3    4    5    6    7    8    9 ...   31   32   33   34
1   40   41   42   43   44   45   46   47   48   49 ...   71   72   73   74
2   80   81   82   83   84   85   86   87   88   89 ...  111  112  113  114
3  120  121  122  123  124  125  126  127  128  129 ...  151  152  153  154
4  160  161  162  163  164  165  166  167  168  169 ...  191  192  193  194
5  200  201  202  203  204  205  206  207  208  209 ...  231  232  233  234

    35   36   37   38   39  id
0   35   36   37   38   39   a
1   75   76   77   78   79   b
2  115  116  117  118  119   c
3  155  156  157  158  159   d
4  195  196  197  198  199   e
5  235  236  237  238  239   f

Expected:

  id    0    1    2    3    4    5    6    7    8 ...    30   31   32   33  \
0  b   40   41   42   43   44   45   46   47   48 ...    70   71   72   73
1  c   80   81   82   83   84   85   86   87   88 ...   110  111  112  113
2  a    0    1    2    3    4    5    6    7    8 ...    30   31   32   33
3  f  200  201  202  203  204  205  206  207  208 ...   230  231  232  233
4  e  160  161  162  163  164  165  166  167  168 ...   190  191  192  193
5  d  120  121  122  123  124  125  126  127  128 ...   150  151  152  153

    34   35   36   37   38   39
0   74   75   76   77   78   79
1  114  115  116  117  118  119
2   34   35   36   37   38   39
3  234  235  236  237  238  239
4  194  195  196  197  198  199
5  154  155  156  157  158  159

My solution:

for col in df2.columns.tolist()[:-1]:
    s = df2.set_index('id')[col]
    val = df['id'].map(s).rename(col)
    dfs.append(val)
temp = pd.concat(dfs, axis=1)
df=pd.concat([df,temp],axis=1)

但是,我的解决方案不好,并且代码运行缓慢,这是我无法忍受的。也许有更好的方法来解决它。

1 个答案:

答案 0 :(得分:1)

onClick(v){ playerIcon = 10; ChangeHeadDialog.dismiss(); applyPlayerIconToPlayer(Integer playerIcon) } merge

how='left'