2017-05-25 108 views
2

如何根据colb更改cola上的值?例如,假设我想更改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' 
} 

如果我APPY改变字典,地图,像这样:

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

然而,它只是改变了ID为1,4和7.

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 

回答

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

您总是提供很好的答案,谢谢〜 (投票) – Wen

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 
相关问题