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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas - 在保留原始列的同时创建具有替换值的新列相关的知识,希望对你有一定的参考价值。

我是蟒蛇的新手所以请耐心等待。我有一个数据框,我想替换特定字符串的值。下面是我的首发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

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

答案

您只需将两个表附加在一起即可:

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)
另一答案

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

以上是关于Pandas - 在保留原始列的同时创建具有替换值的新列的主要内容,如果未能解决你的问题,请参考以下文章

如何在保留原始字符串的同时对字符串执行 Perl 替换?

python pandas:删除A列的重复项,保留B列中具有最高值的行

pandas使用stack函数map函数unstack函数以及字典同时替换dataframe多个数据列的内容

pandas使用replace函数替换dataframe中的值:replace函数对dataframe中指定数据列的值进行替换替换具体数据列的相关值

应用 group_by 并汇总数据,同时保留所有列的信息

Pandas:根据另一列的键在现有列上映射字典值以替换 NaN