Python 基于另一个df列更新df列值

Python 基于另一个df列更新df列值,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个dfqty和dfitem\u info,我试图填充qty['item']中的NaN字段,其中:(我在这里引用SQL) qty.ccy=item\u info.ccy和qty.seller=item\u info.seller 其中元组(ccy、卖方)是两个DFs上的唯一标识符 DF qty | id | qty | item | ccy | seller | +-----+------+----------+-----+--------+ | 001 | 700 | CB0

我有两个df
qty
和df
item\u info
,我试图填充
qty['item']
中的NaN字段,其中:(我在这里引用SQL)

qty.ccy=item\u info.ccy和qty.seller=item\u info.seller
其中元组(ccy、卖方)是两个DFs上的唯一标识符

DF qty
|  id | qty  |   item   | ccy | seller |
+-----+------+----------+-----+--------+
| 001 |  700 | CB04 box | USD | A1     |
| 002 |  500 | NaN      | AUS | A1     |
| 003 | 1500 | AB01 box | USD | B1     |



DF item_info
| sid | seller | ccy |   item   |
+-----+--------+-----+----------+
| AA1 | A1     | USD | CB04 box |
| AA2 | A2     | USD | CB01 Box |
| AA3 | A1     | AUS | AB01 box |
更新后的DF
qty
如下所示

DF qty
|  id | qty  |   item   | ccy | seller |
+-----+------+----------+-----+--------+
| 001 |  700 | CB04 box | USD | A1     |
| 002 |  500 | AB01 box | AUS | A1     |
| 003 | 1500 | AB01 box | USD | B1     |

一种策略可能是在需要匹配的列上合并两个表,然后使用fillna

values = qty.merge(item_info, on=["ccy", "seller"], 
             how="left", suffixes=("_qty", "_info"))["item_info"]
qty["item"] = qty["item"].fillna(value=values)

以下方法可能有效

import pandas as pd
import numpy as np
dfg_item_info = item_info.groupby(["ccy", "seller"])
def fillna(x):
    if np.isnan(x["C"]):
        return (dfg_item_info
               .get_group((x["ccy"], x["seller"]))["item"]
               .values[0])
    else:
        return x["item"]

qty["item] = qty["item"].apply(fillna, axis=1)

如果我没有弄错,您只需遍历qty数据帧,检查qty['item']系列中是否有任何NaN值,如果它大于拾取qty['ccy']和qty['seller']来自同一索引的值,并在item_info数据框中搜索这些值。如果这些值是唯一的,则您将获得一行,然后您可以获得item_info['item']值并替换该值