Python 我需要帮助找出如何仅在标识符键匹配的情况下更改数据帧中的值
假设我有两张桌子 第一 第二 我只想将表2中带有“u”的行的性别属性更改为表1中相应的性别 提前感谢您的帮助。与left join一起使用,然后将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
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 checkKermie
row,它必须是male
@jezrael哦,我以为表1是预期结果,表2是输入……我的坏。。。