2017-05-25 60 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 
相關問題