You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于其他DataFrame列值填充Python DataFrame列?

需求说明

现有两个DataFrame:
第一个DataFrame(店铺信息表):

Area id   shop id  Name
1         100      Apple
1         101      Apple
2         102      Banana
2         103      Banana
2         104      Jack
3         105      Orange
3         106      Orange
4         107      Kiwi
4         108      Kiwi
4         109      Cherry
4         110      Grape
4         111      Grape

第二个DataFrame(营收数据表):

shop id   Price    revenue
100      140      2000
101      150      3000
101      150      3500
102      130      2200
102      130      3300
102      130      3500
102      130      2700
103      135      3100
103      130      3300

需要基于第一个表的shop id,为第二个表填充Name列,得到目标DataFrame:

shop id     Name        Price    revenue
100    Apple      140      2000
101    Apple      150      3000
101    Apple      150      3500
102    Banana     130      2200
102    Banana     130      3300
102    Banana     130      3500
102    Banana     130      2700
103    Banana     135      3100
103    Banana     130      3300

实现方法

方法一:使用Pandas的merge左连接

直接通过shop id将两个表进行左连接,因为第二个表的所有shop id都能在第一个表中找到匹配项,左连接后会自动填充对应的Name值,最后调整列顺序即可。

代码示例:

import pandas as pd

# 模拟创建第一个DataFrame
df1 = pd.DataFrame({
    'Area id': [1,1,2,2,2,3,3,4,4,4,4,4],
    'shop id': [100,101,102,103,104,105,106,107,108,109,110,111],
    'Name': ['Apple','Apple','Banana','Banana','Jack','Orange','Orange','Kiwi','Kiwi','Cherry','Grape','Grape']
})

# 模拟创建第二个DataFrame
df2 = pd.DataFrame({
    'shop id': [100,101,101,102,102,102,102,103,103],
    'Price': [140,150,150,130,130,130,130,135,130],
    'revenue': [2000,3000,3500,2200,3300,3500,2700,3100,3300]
})

# 左连接两个表,匹配shop id
result = pd.merge(df2, df1[['shop id', 'Name']], on='shop id', how='left')
# 调整列顺序为目标格式
result = result[['shop id', 'Name', 'Price', 'revenue']]

print(result)

方法二:创建映射字典后用map填充

先从第一个表提取shop id和Name的唯一映射关系(每个shop id对应唯一的Name),然后用map方法给第二个表添加Name列。

代码示例:

import pandas as pd

# 模拟创建两个DataFrame
df1 = pd.DataFrame({
    'Area id': [1,1,2,2,2,3,3,4,4,4,4,4],
    'shop id': [100,101,102,103,104,105,106,107,108,109,110,111],
    'Name': ['Apple','Apple','Banana','Banana','Jack','Orange','Orange','Kiwi','Kiwi','Cherry','Grape','Grape']
})

df2 = pd.DataFrame({
    'shop id': [100,101,101,102,102,102,102,103,103],
    'Price': [140,150,150,130,130,130,130,135,130],
    'revenue': [2000,3000,3500,2200,3300,3500,2700,3100,3300]
})

# 创建shop id到Name的映射字典(去重避免重复键)
shop_name_map = df1.drop_duplicates(subset='shop id').set_index('shop id')['Name'].to_dict()

# 给df2添加Name列
df2['Name'] = df2['shop id'].map(shop_name_map)
# 调整列顺序
df2 = df2[['shop id', 'Name', 'Price', 'revenue']]

print(df2)

两种方法都能实现需求:方法一适合不需要额外处理映射的场景,操作简单直接;方法二更灵活,生成的映射字典可复用在其他需要匹配的场景中。

内容的提问来源于stack exchange,提问作者thangaraj1980

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:06:07