使用pandas将列中的值添加到新列中

时间:2018-02-07 09:35:32

标签: python pandas

我有一个数据框:

id    category    value
1       1          abc
2       2          abc
3       1          abc
4       4          abc
5       4          abc
6       3          abc

类别1 = best2 = good3 = bad4 =ugly

我想创建一个新列,对于类别1,列中的值应为cat_1,对于类别2,值应为cat2

类别1的new_col2中的

应为cat_best,对于类别2,值应为cat_good

df['new_col'] = ''

我最后的df

id    category    value   new_col   new_col2
1       1          abc     cat_1     cat_best
2       2          abc     cat_2     cat_good
3       1          abc     cat_1     cat_best
4       4          abc     cat_4     cat_ugly
5       4          abc     cat_4     cat_ugly
6       3          abc     cat_3     cat_bad

我可以在for循环中迭代它:

for index,row in df.iterrows():
    df.loc[df.id == row.id,'new_col'] = 'cat_'+str(row['category'])

是否有更好的方法(最省时)

2 个答案:

答案 0 :(得分:1)

我认为您需要将列转换为字符串的连接字符串和map以及第二列的连接:

d = {1:'best', 2: 'good', 3 : 'bad', 4 :'ugly'}
df['new_col'] = 'cat_'+ df['category'].astype(str)
df['new_col2'] = 'cat_'+ df['category'].map(d)

或者:

df = df.assign(new_col= 'cat_'+ df['category'].astype(str), 
               new_col2='cat_'+ df['category'].map(d))

print (df)
   id  category value new_col  new_col2
0   1         1   abc   cat_1  cat_best
1   2         2   abc   cat_2  cat_good
2   3         1   abc   cat_1  cat_best
3   4         4   abc   cat_4  cat_ugly
4   5         4   abc   cat_4  cat_ugly
5   6         3   abc   cat_3   cat_bad

答案 1 :(得分:0)

您也可以使用apply来执行此操作:

df['new_col']=df['category'].apply(lambda x: "cat_"+str(x))