繁体   English   中英

基于条件的 Pandas Dataframe 查找

[英]Pandas Dataframe lookup based on condition

我有这两个 dfs。 在第一个数据框中,某些行缺少“merchant_type”代码。 虽然从数据框中可以看出,也可以从 df 推断出缺少 Merchant_type 代码的“merchant_type_desc”

df1

商家类型 Merchant_type_desc
8641 协会 - 公民、社会和兄弟会
8641 协会 - 公民、社会和兄弟会
8220 学院、大学、专业学校
7922 戏剧制作人(Motion Pict 除外)
5072 硬件设备和用品
5251 五金店
5200 家庭用品仓库
2741 杂项出版印刷
5971 艺术品经销商和画廊
2741 杂项出版印刷
杂项出版印刷
杂货店、超市
杂货店、超市
5411 杂货店、超市
3715 费尔菲尔德客栈
3596 新的 MCC 代码
3771 新的 MCC 代码
7400 新的 MCC 代码
0 默认

df2

商家类型 Merchant_type_desc
8641 协会 - 公民、社会和兄弟会
8220 学院、大学、专业学校
7922 戏剧制作人(Motion Pict 除外)
5072 硬件设备和用品
5251 五金店
5200 家庭用品仓库
2741 杂项出版印刷
5971 艺术品经销商和画廊
5411 杂货店、超市
3715 费尔菲尔德客栈
3596 新的 MCC 代码
3771 新的 MCC 代码
7400 新的 MCC 代码
0 默认

第二个数据帧具有不同的 Merchant_type 代码及其相应的描述。 请注意“新 MCC 代码”商家类型说明。

合并merchant_type_desc 列上的两个dfs 会丢失“NEW MCC CODE”的不同/不同的merchant_types

要在 df1 中查找缺少的 Merchant_type 代码在 excel 中,我会使用 IF 函数首先检查“Merchant_type_description”的值,如果它等于“NEW MCC CODE”,我将保留当前代码,否则我将在 df2 上进行 vlookup 和从中返回代码。 我如何在 Pandas 数据框中实现这一点。

预期输出:

商家类型 Merchant_type_desc
8641 协会 - 公民、社会和兄弟会
8641 协会 - 公民、社会和兄弟会
8220 学院、大学、专业学校
7922 戏剧制作人(Motion Pict 除外)
5072 硬件设备和用品
5251 五金店
5200 家庭用品仓库
2741 杂项出版印刷
5971 艺术品经销商和画廊
2741 杂项出版印刷
2741 杂项出版印刷
5411 杂货店、超市
5411 杂货店、超市
5411 杂货店、超市
3715 费尔菲尔德客栈
3596 新的 MCC 代码
3771 新的 MCC 代码
7400 新的 MCC 代码
0 默认

您可以使用

df3 = df2.loc[df2.merchant_type_desc == 'NEW MCC CODE']

只获取商家类型为 NEW MCC CODE 的行

然后收集所有行

df = pd.concat([df1, df2, df3])

删除空白,这将取决于空白是什么,在这种情况下,我假设它们是空字符串

df = df.loc[~df.merchant_type == '']

然后删除重复的行

df = df.drop_duplicates()

如果您更喜欢单行解决方案,则可以使用它:

df1.loc[df1.merchant_type.isna(), 'merchant_type']=df1.merge(df2[df2.merchant_type_desc!="NEW MCC CODE"], how='left', on='merchant_type_desc').loc[df1.merchant_type.isna(), 'merchant_type_y']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM