有没有一种方法可以根据 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.
我有 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.