Pandas - 在保留原始列的同时创建具有替换值的新列

时间:2018-03-01 19:48:52

标签: python pandas replace data-processing

我是蟒蛇的新手所以请耐心等待。我有一个数据框,我想替换特定字符串的值。下面是我的首发df(df_train):

       A    B     C     D
0     .5   Ex    Ex    Po
1     35   Gd    TA    Gd
2     52   TA    Fa    Ex
3     47   Bd    Po    Gd

我可以轻松地替换我喜欢的值并创建一个新的df(df_train_scaled),如下所示:

df_train_scaled = df_train.replace(['Ex','Gd','TA','Fa','Po'], [5, 4, 3, 2, 1])

我很好奇我是否应该这样做并转到新的df(df_train_scaled)以在建模之前继续数据预处理,或者我是否应该在相同的df(df_train)中创建新列。无论答案如何,我都想弄清楚如何使用替换值将新列添加到相同的df。输出如下:

       A    B   B_new  C   C_new   D   D_new
0     .5   Ex     5    Ex     5    Po    1
1     35   Gd     4    TA     3    Gd    4
2     52   TA     3    Fa     2    Ex    5
3     47   Gd     4    Po     1    Gd    4

如果我这样做,我可以尝试查看我的序数或缩放变量在我的建模工作中是否会表现更好。在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以简单地将两个表附加在一起:

df_train_scaled = df_train.iloc[:,1:].replace(['Ex','Gd','TA','Fa','Po'], [5, 4, 3, 2, 1])
df_train_scaled.columns = [x + "_new" for x in df_train_scaled.columns]
pd.concat([df_train, df_train_scaled], axis=1)

答案 1 :(得分:1)

replace + concat

d=dict(zip(['Ex','Gd','TA','Fa','Po'], [5, 4, 3, 2, 1]))
df.replace(d)
Out[848]: 
      A   B  C  D
0   0.5   5  5  1
1  35.0   4  3  4
2  52.0   3  2  5
3  47.0  Bd  1  4
pd.concat([df,df.iloc[:,1:].replace(d).add_suffix('_New')],1).sort_index(1)
Out[849]: 
      A     B B_New   C  C_New   D  D_New
0   0.5     Ex     5  Ex      5  Po      1
1  35.0     Gd     4  TA      3  Gd      4
2  52.0     TA     3  Fa      2  Ex      5
3  47.0     Bd    Bd  Po      1  Gd      4