[英]Pandas Dataframe Select rows based on values from a lookup dataframe and then another condition based on column value
[英]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.