根据另一个df python pandas更新df列值

时间:2018-06-14 21:03:45

标签: python pandas dataframe

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

qty.ccy = item_info.ccy and qty.seller = item_info.seller 其中元组(ccy,seller)是两个DF上的唯一标识符。

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     |

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

以下可能有用。

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)