首页 > 解决方案 > 用来自另一个数据框的值填充多列

问题描述

我正在尝试根据某些条件用另一个 Pandas 数据框中的列填充一个 Pandas 数据框中的空列。

第一个表是audit_records_df,它看起来像这样:

ID 审计类型 审计日期 恶意级别 可疑计数
123456 未知 2/5/21
123456 清除 2/6/21
123456 终止 2/8/21
345678 终止 2/5/21

第二张表是spam_profile_most_recent_notes

ID 审计类型 审计日期 恶意级别 可疑计数 愤怒_1 愤怒_2
123456 未知 2/5/21 高的 3 222 222
345678 终止 2/5/21 高的 6 222 222

请注意,与 audit_records_df 表不同(其中一个 id 可以有多行),在 spam_profile_most_recent_notes 表中每个 id 只有 1 行。

我正在尝试使用表中同名列的值填充列和表maliciousness_level(我们需要忽略列和),基于以下条件:suspicious_countsaudit_records_dfspam_profile_most_recent_notesire_1ire_2

填充后,audit_records_df表格应如下所示:

ID 审计类型 审计日期 恶意级别 可疑计数
123456 未知 2/5/21 高的 3
123456 清除 2/6/21 高的 3
123456 终止 2/8/21 高的 3
345678 终止 2/5/21 高的 6

我见过一些与此类似的问题:Conditionally fill column with value from another DataFrame based on row match in Pandas。但是,我所看到的只是在 1 列中填写值,这与我必须为多列填写值的用例不同。

任何建议将不胜感激。

标签: pythonpandas

解决方案


我认为您可以通过以下方式解决此问题:

  1. 从表中删除malicious_levelsuspicious_countsaudit_record_df
  2. 仅保留id,malicious_levelsuspicious_countsspam_profile_most_recent_notes
  3. 使用在两个表上执行左内连接id
audit_record_df.drop(['maliciousness_level', 'suspicious_counts'], axis=1, inplace=True)
print(audit_record_df)

       id  audit_type audit_date
0  123456     Unknown     2/5/21
1  123456     Cleared     2/6/21
2  123456  Terminated     2/8/21
3  345678  Terminated     2/5/21

spam_profile_most_recent_notes = spam_profile_most_recent_notes[['id', 'maliciousness_level', 'suspicious_counts']]
print(spam_profile_most_recent_notes)

       id  audit_type audit_date
0  123456     Unknown     2/5/21
1  123456     Cleared     2/6/21
2  123456  Terminated     2/8/21
3  345678  Terminated     2/5/21

new_df = audit_record_df.merge(spam_profile_most_recent_notes, on='id', how='left')
print(new_df)

       id  audit_type audit_date maliciousness_level  suspicious_counts
0  123456     Unknown     2/5/21                high                  3
1  123456     Cleared     2/6/21                high                  3
2  123456  Terminated     2/8/21                high                  3
3  345678  Terminated     2/5/21                high                  6   

推荐阅读