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