在pandas中加入和重命名列

时间:2018-01-12 10:58:44

标签: python pandas dataframe

以下是我的数据框:

DF1:

pri  sec0  sec1  sec2
ACL  EMR   DFG   XHD
ABC  MKB   JKL   KLF
XYZ  LMN   SDF   GHY

DF2:

name loc
ACL 12
EMR 23
DFG 431
XHD 48
ABC 55
MKB 699
JKL 70
KLF 82
XYZ 93
LMN 10
SDF 235
GHY 53

我正在尝试将名称列为df2的df1的每个pri,sec0,sec1 ...列连接起来,并希望将loc列附加到pri,sec0,sec1 ......的每个匹配元素中(分别为pri_loc,sec0_loc ...)

以下是必需的输出:

pri  pri_loc  sec0  sec0_loc  sec1  sec1_loc  sec2  sec2_loc
ACL  12       EMR   23        DFG   431       XHD   48
ABC  55       MKB   699       JKL   70        KLF   82
XYZ  93       LMN   10        SDF   235       GHY   53

我可以获得有关如何实现这一目标的建议吗?

1 个答案:

答案 0 :(得分:1)

您可以join replace创建由set_index创建的DataFrame所有值add_suffix新成员Series,然后为更改列名称添加sort_index最后set_index用于排序列:

df=df1.join(df1.replace(df2.set_index('name')['loc']).add_suffix('_loc')).sort_index(axis=1)
print (df)
   pri  pri_loc sec0  sec0_loc sec1  sec1_loc sec2  sec2_loc
0  ACL       12  EMR        23  DFG       431  XHD        48
1  ABC       55  MKB       699  JKL        70  KLF        82
2  XYZ       93  LMN        10  SDF       235  GHY        53

详情:

print (df1.replace(df2.set_index('name')['loc']).add_suffix('_loc'))
   pri_loc  sec0_loc  sec1_loc  sec2_loc
0       12        23       431        48
1       55       699        70        82
2       93        10       235        53

编辑:

  

如果我在ternary中再添加一列df1并且我不希望以df2的名称加入它,但我想在输出中使用

然后使用reset_index第一个和最后一个this

df1 = df1.set_index('ternary')
df = (df1.join(df1.replace(df2.set_index('name')['loc']).add_suffix('_loc'))
         .sort_index(axis=1)
         .reset_index())
print (df)