Pandas 如何基于另一列的匹配规则向DataFrame追加对应数据?
Pandas 双DataFrame文档编号匹配赋值需求
我希望通过校验两个DataFrame是否包含相同的文档编号,将一个DataFrame中的数值追加到另一个DataFrame的对应位置。
示例数据
ip_df 数据
CardName DocNum DocDate DocTotal DocNum2 PaidToDate Balance 0 CompanyA 800100001 2021-03-01 10000.000000 920000000 10000.000000 0.000000 1 CompanyA 800100002 2021-03-01 20000.000000 920000000 20000.000000 0.000000 2 CompanyA 800100003 2021-03-01 30000.000000 920000000 30000.000000 0.000000 3 CompanyA 800100004 2021-03-01 40000.000000 920000000 40000.000000 0.000000 4 CompanyA 800100005 2021-03-01 50000.000000 920000000 50000.000000 0.000000 .. ... ... ... ... ... ... ... 94 CompanyY 800100006 2021-03-01 60000.000000 920000005 60000.000000 0.000000 95 CompanyY 800100007 2021-03-01 70000.000000 920000005 70000.000000 0.000000 96 CompanyY 800100008 2021-03-01 80000.000000 920000005 80000.000000 0.000000 97 CompanyZ 800100009 2021-03-01 90000.000000 920000006 90000.000000 0.000000 98 CompanyZ 800100010 2021-03-01 11000.000000 920000006 11000.000000 0.000000 [99 rows x 7 columns]
ar_df 数据
BPCode Balance Currency DueDate BPName TransId Ref1 Payment Received Bank Charge 0 XXXXXXXX 10000.000000 USD 2020-09-29 CompanyA 503378 800100001 0 0 1 XXXXXXXX 20000.000000 USD 2021-03-01 CompanyA 543103 800100002 0 0 2 XXXXXXXX 30000.000000 USD 2021-03-01 CompanyA 543171 800100003 0 0 3 XXXXXXXX 40000.000000 USD 2021-03-01 CompanyA 544205 800100004 0 0 4 XXXXXXXX 50000.000000 USD 2021-03-01 CompanyA 544222 800100005 0 0 ... ... ... ... ... ... ... ... ... ... 3763 XXXXXXXX 60000.000000 USD 2021-03-02 CompanyY 548612 800100006 0 0 3764 XXXXXXXX 70000.000000 USD 2021-03-02 CompanyY 547727 800100007 0 0 3765 XXXXXXXX 80000.000000 USD 2021-03-30 CompanyY 553819 800100008 0 0 3766 XXXXXXXX 90000.000000 USD 2021-04-01 CompanyZ 547707 800100009 0 0 3767 XXXXXXXX 11000.000000 USD 2021-04-29 CompanyZ 556102 800100010 0 0 [3768 rows x 9 columns]
现有尝试与问题
我最初尝试的实现逻辑如下,但不确定是否正确:
for row in ip_df: if ip_df.row['DocNum'] == ar_df.row['Ref1']: ap_df.row['Payment Received'] = ip_df.row['PaidToDate']
- 不确定上述实现方式是否正确
- 查阅过相关资料,但大多解决方案仅针对标量值匹配场景,不符合当前需求
实际需求
校验ip_df中每行的DocNum是否存在于ar_df的Ref1列中,若匹配成功,则将ar_df对应行的Payment Received字段设置为ip_df对应行的PaidToDate值。
期望输出效果
BPCode Balance Currency DueDate BPName TransId Ref1 Payment Received Bank Charge 0 XXXXXXXX 10000.000000 USD 2020-09-29 CompanyA 503378 800100001 10000.000000 0 1 XXXXXXXX 20000.000000 USD 2021-03-01 CompanyA 543103 800100002 20000.000000 0 2 XXXXXXXX 30000.000000 USD 2021-03-01 CompanyA 543171 800100003 30000.000000 0 3 XXXXXXXX 40000.000000 USD 2021-03-01 CompanyA 544205 800100004 40000.000000 0 4 XXXXXXXX 50000.000000 USD 2021-03-01 CompanyA 544222 800100005 50000.000000 0 ... ... ... ... ... ... ... ... ... ... 3763 XXXXXXXX 60000.000000 USD 2021-03-02 CompanyY 548612 800114258 60000.000000 0 3764 XXXXXXXX 70000.000000 USD 2021-03-02 CompanyY 547727 800113975 70000.000000 0 3765 XXXXXXXX 80000.000000 USD 2021-03-30 CompanyY 553819 800115292 80000.000000 0 3766 XXXXXXXX 90000.000000 USD 2021-04-01 CompanyZ 547707 800113957 90000.000000 0 3767 XXXXXXXX 11000.000000 USD 2021-04-29 CompanyZ 556102 800115741 11000.000000 0 [3768 rows x 9 columns]
内容的提问来源于stack exchange,提问作者Beelz
相关产品推荐
相关产品推荐

