在熊猫合并期间增加值

时间:2021-06-18 11:42:00

标签: python pandas list numpy dictionary

我有 2 个数据框

df1

product_id      value       name
abc             10          a
def             20          b
ggg             10          c

df2 我在使用 df2.groupby(['prod_id'])['code'].count().reset_index()

后得到的
prod_id         code
abc             10
def             20
ggg             10
ooo             5
hhh             1

我想合并从 df2df1 的值,左边 product_id,右边 prod_id

获得:

product_id      value       name
abc             20          a
def             40          b
ggg             20          c

我试过了:

pd.merge(df1, df2.groupby(['prod_id'])['code'].count().reset_index(), 
         left_on='product_id', right_on='prod_id', how='left')

返回 df1 和 2 个额外的列 prod_idcode,其中 code 列包含我想在 {value 中增加的数量{1}}。现在我可以只添加那两列,但我想避免这种情况。

2 个答案:

答案 0 :(得分:3)

这是另一种选择:

df1['value'] = df1.product_id.map(dict(df2.values)).fillna(0).add(df1.value)

完整示例:

df1 = pd.DataFrame({'product_id': {0: 'abc', 1: 'def', 2: 'ggg'},
                    'value': {0: 10, 1: 20, 2: 10},
                    'name': {0: 'a', 1: 'b', 2: 'c'}})

df2 = pd.DataFrame({'prod_id': {0: 'abc', 1: 'def', 2: 'ggg', 3: 'ooo', 4: 'hhh'},
                    'code': {0: 10, 1: 20, 2: 10, 3: 5, 4: 1}})

df1['value'] = df1.product_id.map(dict(df2.values)).fillna(0).add(df1.value)

输出:

  product_id  value name
0        abc     20    a
1        def     40    b
2        ggg     20    c

答案 1 :(得分:1)

您可以在 df2 上以 df1 product_id 的顺序使用 reindex,在 groupby.count 之后(没有 reset_index)。喜欢

df1['value'] += (
    df2.groupby(['prod_id'])
    ['code'].count()
    .reindex(df1['product_id'], fill_value=0)
    .to_numpy()
)