如果满足条件,则基于另一个数据帧中的匹配更新数据帧 [英] Update dataframe based on match in another dataframe if condition is met

查看:71
本文介绍了如果满足条件,则基于另一个数据帧中的匹配更新数据帧的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个数据框,我想更新第一个. df1包含不同的市场(M1,M2等),并且每个市场都有一些代码(数字或虚拟)

I have two dataframes and I want to update the first one. df1 contains different Markets (M1, M2, etc.) and some Codes for each of them (numbers or Dummy)

import pandas as pd
labels = ["Market","Code"]
values = [["M1","1234"],["M1","Dummy"],["M1","1234"],["M2","Dummy"],["M1","1234"]]
df = pd.DataFrame.from_records(values,columns=labels)
print(df)
 Market   Code
0     M1   1234
1     M1  Dummy
2     M1   1234
3     M2  Dummy
4     M1   1234

如果Code == Dummy,那么我想根据该特定市场的df2中的值来更新df中的Code.因此,每个市场都应收到一个不同的新代码.

If Code == Dummy, then I want to update the Code in df based on the value in df2 for this specific market. So each Market should receive a different new Code.

labels = ["Market","Code(New)"]
values = [["M1","4567"],["M2","5678"]]
df2 = pd.DataFrame.from_records(values,columns=labels)
print(df2)
 Market Code(New)
0     M1      4567
1     M2      5678

最后我应该得到

labels = ["Market","Code"]
values = [["M1","1234"],["M1","4567"],["M1","1234"],["M2","5678"],["M1","1234"]]
df_clean = pd.DataFrame.from_records(values,columns=labels)
print(df_clean)
  Market  Code
0     M1  1234
1     M1  4567
2     M1  1234
3     M2  5678
4     M1  1234

推荐答案

Market.loc上的.merge用于df.Code == 'Dummy'值的子集

In [288]: df.loc[df.Code=='Dummy', 'Code'] = df.merge(df2, on='Market', how='left')['Code(New)']

In [289]: df
Out[289]:
  Market  Code
0     M1  1234
1     M1  4567
2     M1  1234
3     M2  5678
4     M1  1234

这篇关于如果满足条件,则基于另一个数据帧中的匹配更新数据帧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆