2017-05-25 3 views
2

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' 
} 

そして、私はそうのようなマップに変更辞書をAPPY場合:

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 

答えて

4

fillnaまたはcombine_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.loc[df.ID.isin(change.keys()),'Name'] = change.values() 

サンプル実行

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

はここでマスキング方法で一つだが -

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 
関連する問題