首页 > 解决方案 > 如何用 loc 替换字符串。输出?

问题描述

我有两个数据框:

数据框_A:

Account_Nbr  Customer_ID   Gender
  1234          A1234       male
  5678            ?        female

数据框_B:

Account_Nbr  Customer_ID
  1234          A1234
  5678          B5678

我想替换'?在带有'B5678'的数据框A中,这是我的代码:

Dataframe_A = Dataframe_A.assign(
Customer_ID = lambda x:
[cid if (cid != '?' ) else
 Datafram_B.loc[Datafram_B['Account_Nbr'] == acct, ['Customer_ID']]
 for cid, acct in zip(x.Customer_ID, x.Account_Nbr)]

Dataframe_A

但输出不是我所期望的:

Account_Nbr  Customer_ID   Gender
  1234          A1234       male
  5678       Customer_ID   female
                B5678

看起来它用整个系列代替了电池。我怎样才能得到这样的输出?谢谢你。

Account_Nbr  Customer_ID   Gender
  1234          A1234       male
  5678          B5678      female

标签: python-3.x

解决方案


下面的代码应该可以完成这项工作。

import pandas as pd

df1 = pd.DataFrame([
    [1234, 'A1234', 'male'],
    [5678, '?', 'female']], columns=['Account_Nbr', 'Customer_ID', 'Gender'])

df2 = pd.DataFrame([
    [1234, 'A1234'],
    [5678, 'B5678']], columns=['Account_Nbr', 'Customer_ID'])

mask = df1['Account_Nbr'] == df2['Account_Nbr']
df1.loc[mask, 'Customer_ID'] = df2[mask]['Customer_ID']

df1.head()

输出:

   Account_Nbr Customer_ID  Gender
0         1234       A1234    male
1         5678       B5678  female

推荐阅读