如何根据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
答案 0 :(得分:4)
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