Python 我需要帮助找出如何仅在标识符键匹配的情况下更改数据帧中的值

Python 我需要帮助找出如何仅在标识符键匹配的情况下更改数据帧中的值,python,pandas,Python,Pandas,假设我有两张桌子 第一 第二 我只想将表2中带有“u”的行的性别属性更改为表1中相应的性别 提前感谢您的帮助。与left join一起使用,然后将u值替换为另一列的\u: df2 = df2.merge(df1, on=['customer_id','first_name'], how='left', suffixes=('','_')) df2['gender'] = df2['gender'].mask(df2['gender'] == 'u', df2.pop('gender_')) pr

假设我有两张桌子

第一

第二

我只想将表2中带有“u”的行的性别属性更改为表1中相应的性别

提前感谢您的帮助。

与left join一起使用,然后将
u
值替换为另一列的
\u

df2 = df2.merge(df1, on=['customer_id','first_name'], how='left', suffixes=('','_'))
df2['gender'] = df2['gender'].mask(df2['gender'] == 'u', df2.pop('gender_'))
print (df2)
  customer_id first_name  gender
0         3343  Cristabel  female
1         2469     Kermie    male
2          996       Aura  female
3         1628   Hermione  female
4         2696   Isabelle  female
5         1689       Jhon    male
6         5698     Albert    male
如果只想通过
customer\u id
进行匹配,而不是通过两列进行匹配,则可以选择:

mask = df2['gender'] == 'u'
s = df1.set_index('customer_id')['gender']
df2.loc[mask, 'gender'] = df2.loc[mask, 'customer_id'].map(s).fillna(df2['gender'])
print (df2)
   customer_id first_name  gender
0         3343  Cristabel  female
1         2469     Kermie    male
2          996       Aura  female
3         1628   Hermione  female
4         2696   Isabelle  female
5         1689       Jhon    male
6         5698     Albert    male
与left join一起使用,然后将
u
值替换为另一列为
\u

df2 = df2.merge(df1, on=['customer_id','first_name'], how='left', suffixes=('','_'))
df2['gender'] = df2['gender'].mask(df2['gender'] == 'u', df2.pop('gender_'))
print (df2)
  customer_id first_name  gender
0         3343  Cristabel  female
1         2469     Kermie    male
2          996       Aura  female
3         1628   Hermione  female
4         2696   Isabelle  female
5         1689       Jhon    male
6         5698     Albert    male
如果只想通过
customer\u id
进行匹配,而不是通过两列进行匹配,则可以选择:

mask = df2['gender'] == 'u'
s = df1.set_index('customer_id')['gender']
df2.loc[mask, 'gender'] = df2.loc[mask, 'customer_id'].map(s).fillna(df2['gender'])
print (df2)
   customer_id first_name  gender
0         3343  Cristabel  female
1         2469     Kermie    male
2          996       Aura  female
3         1628   Hermione  female
4         2696   Isabelle  female
5         1689       Jhon    male
6         5698     Albert    male

为什么这么复杂?一个简单的replace()将do@Capie-因为您的解决方案与客户id、名字不匹配,所以wrong@jezrael您可以自己尝试,效果很好……@Capie check
Kermie
row,必须是
male
@jezrael哦,我以为表1是预期的结果,表2是输入…我的错…为什么这么复杂?一个简单的replace()将do@Capie-因为您的解决方案与客户id、名字不匹配,所以wrong@jezrael您可以自己尝试,效果很好……@Capie check
Kermie
row,它必须是
male
@jezrael哦,我以为表1是预期结果,表2是输入……我的坏。。。