有没有一种方法可以根据 pandas 中类似 table 的新值替换 table 的 1 列的旧值

is there a way to replace old values of 1 column of table based on a new value of similar table in pandas

我有 1 个 table,其中包含 15k 行,它显示了一个过期帐户 付了谁还没有付。第二个table显示人的id和账号 谁支付了。我正在尝试找出更新第一个 table 的最佳方法 从逾期到支付。 这是第一个 table 叫做 "overdue"

Id         Name      Account
300         Sandy      paid
301        Stack       paid
302        Que         overdue
303         Liz        overdue
304        Grace       overdue
305          DP        overdue
306        Batty       overdue
307         tako       overdue

这是第 2 次更新 table 基于月末关闭“付费 table"

 Id         Name      Account
 300         Sandy      paid
 301        Stack       paid
 302        Que         paid
 303         Liz        overdue
 304        Grace       paid
 305          DP        paid
 306        Batty       paid
 307         tako       paid

我想让 table 看起来像这样。

 Id         Name      Account
 300         Sandy      paid
 301        Stack       paid
 302        Que         paid
 303         Liz       overdue
 304        Grace       paid
 305          DP        paid
 306        Batty       paid
 307         tako       paid

我试过这段代码,但不确定对于 15k id 的最佳方法 已更新帐户

df1.loc[df1['ID'] == 300, ['Name']] = 'Paid'

检查 update

df1.set_index('Id',inplace=True)
df1.update(df2.set_index('Id')[['Account']])
df1.reset_index(inplace=True)
df1
Out[289]: 
    Id   Name  Account
0  300  Sandy     paid
1  301  Stack     paid
2  302    Que     paid
3  303    Liz  overdue
4  304  Grace     paid
5  305     DP     paid
6  306  Batty     paid
7  307   tako     paid

您还可以 select 使用合并的列:

In [11]: df2.merge(df1[["Id"]], how="right")["Account"]
Out[11]:
0       paid
1       paid
2       paid
3    overdue
4       paid
5       paid
6       paid
7       paid
Name: Account, dtype: object

效率稍高(仅 select 需要的列):

In [12]: df2[["Id", "Account"]].merge(df1[["Id"]], how="right")["Account"]
Out[12]:
0       paid
1       paid
2       paid
3    overdue
4       paid
5       paid
6       paid
7       paid
Name: Account, dtype: object

现在您可以更新:

In [13]: df1.update(df2[["Id", "Account"]].merge(df1[["Id"]], how="right")["Account"])

In [14]: df1
Out[14]:
    Id   Name  Account
0  300  Sandy     paid
1  301  Stack     paid
2  302    Que     paid
3  303    Liz  overdue
4  304  Grace     paid
5  305     DP     paid
6  306  Batty     paid
7  307   tako     paid

注意:这两个都假设df2中的每个id都存在于df1中。如果不是这种情况,您应该创建一个带有外部连接的新 DataFrame,而不是更新 df1.