Python:基于条件将不同长度DataFrame的信息提取合并到另一DataFrame
实现方法
你需要的是基于两个共同键的多对一表合并,直接使用Pandas内置的merge函数即可,不需要额外处理两个DataFrame的长度差异:
import pandas as pd # 以df1为基准,按date、day_period两个字段匹配df2的对应字段 result_df = pd.merge( left=df1, right=df2, on=["date", "day_period"], how="left" )
参数说明
on=["date", "day_period"]:指定两个表的匹配规则,只有两个字段同时相等的行才会匹配成功how="left":指定左连接逻辑,完整保留df1的所有行,匹配成功的行自动填充df2的对应列值,未匹配到的位置默认填充NaN
前置校验建议
为了避免合并后行数异常膨胀,可以先校验df2的匹配键是否唯一:
# 输出为True说明df2不存在重复的(date, day_period)组合 print(df2.duplicated(subset=["date", "day_period"]).sum() == 0)
如果存在重复键,可先对df2去重后再合并:
# 保留每个(date, day_period)的第一条记录 df2_unique = df2.drop_duplicates(subset=["date", "day_period"], keep="first")
注:你给出的示例输出存在逻辑偏差,按匹配规则,df1中所有date=2021-06-09且day_period=Morning的行,匹配到的应该是df2中对应行的temperature=14、atmospheric_pressure=30.1等值,上述代码会输出符合逻辑的匹配结果。
内容的提问来源于stack exchange,提问作者Joehat
相关产品推荐
相关产品推荐

