我有一个数据框:
id category value
1 1 abc
2 2 abc
3 1 abc
4 4 abc
5 4 abc
6 3 abc
类别1 = best
,2 = good
,3 = bad
,4 =ugly
我想创建一个新列,对于类别1,列中的值应为cat_1
,对于类别2,值应为cat2
。
应为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'])
是否有更好的方法(最省时)
答案 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))