python-3.x - 加入两个熊猫数据框并将数据匹配到一列
问题描述
我有以下 2 个取自 excel 文件的数据框:
df_a = 10000 行(如具有所有唯一 #s 的主列表)
df_b = 670 行
我正在加载一个包含 zip、地址、状态的 excel 文件 (df_b),我想匹配该信息,然后添加来自 df_a 的供应商#,这样我就可以拥有 1 个仍然是 670 行但现在有供应商行列的文件.
df_a =
(10000 rows)
(unique)
supplier # ZIP ADDRESS STATE Unique Key
0 7100000 35481 14th street CA 35481-14th street-CA
1 7000005 45481 14th street CA 45481-14th street-CA
2 7000006 45482 140th circle CT 45482-140th circle-CT
3 7000007 35482 140th circle CT 35482-140th circle-CT
4 7000008 35483 13th road VT 35483-13th road-VT
df_b =
(670 rows)
ZIP ADDRESS STATE Unique Key
0 35481 14th street CA 35481-14th street-CA
1 45481 14th street CA 45481-14th street-CA
2 45482 140th circle CT 45482-140th circle-CT
3 35482 140th circle CT 35482-140th circle-CT
4 35483 13th road VT 35483-13th road-VT
OUTPUT:
df_c =
(670 rows)
ZIP ADDRESS STATE Unique Key (Unique)supplier #
0 35481 14th street CA 35481-14th street-CA 7100000
1 45481 14th street CA 45481-14th street-CA 7100005
2 45482 140th circle CT 45482-140th circle-CT 7100006
3 35482 140th circle CT 35482-140th circle-CT 7100007
4 35483 13th road VT 35483-13th road-VT 7100008
我尝试将 2 个 dfs 合并在一起,但它们不匹配,而是我得到了一堆 NAn
df10 = df_a.merge(df_b, on = 'Unique Key', how= 'left'
结果是 1 个数据框,其中包含很多列且没有匹配项。此外,我也尝试过 .map 和 .concat 。我不确定发生了什么事。
解决方案
你有没有尝试过
df10 = df_a.merge(df_b, on = 'Unique Key', how = "inner")
“内部连接”仅保留公共记录,IIUC 是您想要实现的
添加于 2021-02-14
从您的测试数据创建 csvs 并读入 pandas
df_mrg = df_a.merge(df_b[1:3], how='inner', on='Unique_Key')
df_mrg
笔记:
- df_b 上的切片以创建子集
- 更改了列名(_ 以外的空格和符号让我的皮肤爬行)
- 我还手动消除了 Unique_Key 中单元格值的前导和尾随空格(有可以自动化的字符串方法)
还要考虑:
df_mrg = df_a.merge(df_b[1:3], how='right', on='Unique_Key')
将为当前数据返回与“内部”相同的数据框,但根据您的数据和您想知道的内容,可能值得测试。
此外,合并允许传递列列表。由于复合键的源列在两个表中,您可以通过以下方式测试复合键的潜在问题:
df_mrg2 = df_a.merge(df_b[1:3], how='inner', on=['ZIP','ADDRESS','STATE'])
np.where(df_mrg2['Unique_Key_x']==df_mrg2['Unique_Key_y'],True,False)
df_mrg2 返回与 df_mrg 相同的记录集,但不重复“on”字段。
所有这些都超出了回答您的问题,但希望它有所帮助
推荐阅读
- c++ - 可能的 C++ 17 编译器版本问题“不是 'std' 的成员”
- python - 如何计算每个客户 ID 的总和?
- ios - 如何摆脱 iOS 14 中的 MKBalloonCalloutView
- python - seaborn热图不规则日期xaxis标签
- django - Django PWA - 会话变量未更新
- javascript - 使用 TypeScript 和 ReactJS 将数据从 API 传递到另一个组件
- swift - imageurl 未加载到第二个视图控制器中
- javascript - 在 javascipt 中过滤 RESTApi 数据
- angular - Angular2 NgStyle 没有在点击时更新
- python - 错误后如何让while循环重新开始?