我有 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
我想合并从 df2
到 df1
的值,左边 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_id
和 code
,其中 code
列包含我想在 {value
中增加的数量{1}}。现在我可以只添加那两列,但我想避免这种情况。
答案 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()
)