如何根据不同的列更改一列中的值?

时间:2017-05-25 20:05:31

标签: python pandas

如何根据cola更改colb上的值?例如,假设我想更改ID = 1,4,7的名称?

ID Name
1  Name1
2  Name2
3  Name3
4  Name4
5  Name5
6  Name6
7  Name7
8  Name8

最好我想使用字典,如下:

change = {
    1: 'foo',
    4: 'bar',
    7: 'baz'
}

如果我用这样的地图来应用更改词典:

df['Name'] = df['ID'].map(change) 

但是,它只会更改1,4和7的ID。

ID Name
    1  foo
    2  
    3  
    4  bar
    5  
    6  
    7  baz
    8  

是否只更改字典中的行而忽略其余的行?要得到结果:

ID Name
1  foo
2  Name2
3  Name3
4  bar
5  Name5
6  Name6
7  baz
8  Name8

2 个答案:

答案 0 :(得分:4)

添加fillnacombine_first

df['Name'] = df['ID'].map(change).fillna(df['Name'])
print (df)
   ID   Name
0   1    foo
1   2  Name2
2   3  Name3
3   4    bar
4   5  Name5
5   6  Name6
6   7    baz
7   8  Name8

或者:

df['Name'] = df['ID'].map(change).combine_first(df['Name'])
print (df)
   ID   Name
0   1    foo
1   2  Name2
2   3  Name3
3   4    bar
4   5  Name5
5   6  Name6
6   7    baz
7   8  Name8

答案 1 :(得分:1)

这是一个采用掩蔽方法的方法 -

df.loc[df.ID.isin(change.keys()),'Name'] = change.values()

示例运行 -

In [396]: df
Out[396]: 
   ID   Name
0   1  Name1
1   2  Name2
2   3  Name3
3   4  Name4
4   5  Name5
5   6  Name6
6   7  Name7
7   8  Name8

In [397]: df.loc[df.ID.isin(change.keys()),'Name'] = change.values()

In [398]: df
Out[398]: 
   ID   Name
0   1    foo
1   2  Name2
2   3  Name3
3   4    bar
4   5  Name5
5   6  Name6
6   7    baz
7   8  Name8