Python 替换数据帧中仅与另一数据帧中的匹配值相关的值

Python 替换数据帧中仅与另一数据帧中的匹配值相关的值,python,pandas,dataframe,replace,loc,Python,Pandas,Dataframe,Replace,Loc,我有一个数据帧,看起来像这样: 客户数据 account client assets A bob 1000 A frank 1000 A jim 1000 A howie 1000 B bob 2000 B frank 2000 B jim 2000 C frank 500 C howie 5

我有一个数据帧,看起来像这样:

客户数据

account  client   assets
A        bob      1000 
A        frank    1000
A        jim      1000
A        howie    1000
B        bob      2000 
B        frank    2000
B        jim      2000
C        frank    500
C        howie    500
D        bob      250
D        jim      250
D        howie    250
account  client   assets
A        bob      1000 
A        frank    1000
A        jim      1000
A        howie    1000
B        bob      2150
B        frank    2150
B        jim      2150
C        frank    500
C        howie    500
D        bob      750
D        jim      750
D        howie    750
另一个看起来像这样

手动更换

account  assets
B        2150
D        750
我想用account列中匹配的每个实例的新金额替换第一个数据帧中资产的每个实例

客户数据

account  client   assets
A        bob      1000 
A        frank    1000
A        jim      1000
A        howie    1000
B        bob      2000 
B        frank    2000
B        jim      2000
C        frank    500
C        howie    500
D        bob      250
D        jim      250
D        howie    250
account  client   assets
A        bob      1000 
A        frank    1000
A        jim      1000
A        howie    1000
B        bob      2150
B        frank    2150
B        jim      2150
C        frank    500
C        howie    500
D        bob      750
D        jim      750
D        howie    750
我发现的大多数示例都是用于替换1个实例或替换数据帧中与替换它的实例的确切大小相匹配的值的其他示例

如果有任何帮助,我将不胜感激,因为我尝试使用了.loc的几个变体,但最终用数据帧b中的升序值替换了所有值,而不仅仅是精确匹配

编辑: 尝试


您可以尝试使用
map
,后跟
isna

clientdata['assets'] = (clientdata['account'].map(manualreplace.set_index('account')['assets'])
                           .fillna(clientdata['assets'])
                       )
输出:

   account client  assets
0        A    bob  1000.0
1        A  frank  1000.0
2        A    jim  1000.0
3        A  howie  1000.0
4        B    bob  2150.0
5        B  frank  2150.0
6        B    jim  2150.0
7        C  frank   500.0
8        C  howie   500.0
9        D    bob   750.0
10       D    jim   750.0
11       D  howie   750.0

这可能不是最好的方法,但它是有效的:

df = pd.merge(cd_df, rep_df, how="left", on="account", )
df["assets"] = df["assets_y"]
df.loc[pd.isna(df["assets_y"]), "assets"] = df["assets_x"]
df = df.drop(["assets_x", "assets_y"], axis=1)
“更新”可用于获得所需的结果

account = ['A','A','A','A','B','B','B','C','C']
client = ['bob','frank','jim','howie','bob','frank','howie','bob','frank']
asset = [1, 2, 3,1,2,3,1,2,3]

df1 = pd.DataFrame({'account':account, 'client':client, 'asset':asset})
assets = [100, 110]
account = ['B', 'C']

df2 = pd.DataFrame({'account':account, 'asset':assets})


df1 = df1.set_index('account')
df2 = df2.set_index('account')
df1.update(df2)
df1

哦,伙计,是的,这很有效。现在我只需要坐下来想想原因。以前从未用过地图。非常感谢你的帮助。