Python 基于另一个df列更新df列值
我有两个dfPython 基于另一个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
qty
和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 | 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 |
更新后的DFqty
如下所示
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']值并替换该值