Python Pandas环境下合并两张数据表并覆盖价格字段的实现方法
实现方案
核心思路
- 先统一处理表中用字符串
'NaN'表示的空值,替换为Pandas原生空值方便计算 - 以df1为主表,通过
Stock name字段和df2做左连接,拿到df2中对应股票的价格 - 用df2的价格覆盖df1中同股票的价格,无匹配时保留df1原有价格
- 清理多余字段,调整列顺序得到最终结果
注:原测试数据中df1的Brian行Stock name为字符串'NaN',和期望结果中的Google不一致,已做对应修正,你可以根据实际数据调整即可。
完整可运行代码
import pandas as pd import numpy as np # 构造测试数据 df1 = {'name': ['John','Katie','Emma', 'Brian'], 'Stock name': ['Apple', 'Tesla','Samsung', 'Google'], 'Price': [160,800,70, np.nan], 'country': ['US','US','KOR', np.nan], 'No. Stock': ['4','10','50', np.nan]} df1 = pd.DataFrame(df1) data_2 = { 'Stock name': ['Tesla', 'Apple','Samsung', 'Google', 'Square'], 'Price': [900,150,110,300,300] } df2 = pd.DataFrame(data_2) # 合并逻辑 # 左连接合并两个表,区分新旧价格字段 merged_df = df1.merge(df2, on='Stock name', how='left', suffixes=('_old', '_new')) # 优先用df2的新价格覆盖旧价格,无匹配时保留旧价格 merged_df['Price'] = merged_df['Price_new'].fillna(merged_df['Price_old']) # 保留需要的字段,调整顺序和原df1一致 result = merged_df[['name', 'Stock name', 'Price', 'country', 'No. Stock']] # 输出结果 print(result)
输出结果
和你期望的结果完全一致:
name Stock name Price country No. Stock 0 John Apple 150.0 US 4 1 Katie Tesla 900.0 US 10 2 Emma Samsung 110.0 KOR 50 3 Brian Google 300.0 NaN NaN
内容的提问来源于stack exchange,提问作者jaewon lee
相关产品推荐
相关产品推荐

