如何依据Time与DayYear_Count列值合并两个DataFrame?
Pandas按多列匹配合并DataFrame并保留指定列
我有如下两个Pandas DataFrame:
df1:
DayYear_Count Time 0 2018-03-26 00:00:00 84 00:00:00 2018-03-26 01:00:00 84 01:00:00 2018-03-26 02:00:00 84 02:00:00 2018-03-26 03:00:00 84 03:00:00 2018-03-26 04:00:00 84 04:00:00
df2:
Time Temp DayYear_Count 0 00:00:00 6.065167 84 1 01:00:00 5.692167 84 2 02:00:00 5.151917 84 3 03:00:00 4.636500 84 4 04:00:00 4.277417 84
需求是将这两个DataFrame合并,要求按Time和DayYear_Count两列完全匹配,仅从df2中提取对应匹配行的Temp列数据,合并后保留df1的索引和原有列,最终预期效果示例如下:
DayYear_Count Time Temp 0 2018-03-26 00:00:00 84 00:00:00 6.065 2018-03-26 01:00:00 84 01:00:00 3.055 2018-03-26 02:00:00 84 02:00:00 NaN
解决方案
可以使用Pandas的merge()方法,指定合并键为Time和DayYear_Count,并设置合并方式为左连接(保留df1的所有行),最后按需整理列顺序:
import pandas as pd # 执行合并 merged_df = pd.merge(df1, df2[['Time', 'DayYear_Count', 'Temp']], on=['Time', 'DayYear_Count'], how='left') # 保留原df1的列顺序(可选操作) merged_df = merged_df[['DayYear_Count', 'Time', 'Temp']] # 查看合并结果 print(merged_df)
代码说明
on=['Time', 'DayYear_Count']:指定以这两列作为匹配依据,仅当两列值完全一致时才会匹配对应行how='left':采用左连接逻辑,保留df1的全部行,若df2中无匹配项,Temp列会自动填充NaNdf2[['Time', 'DayYear_Count', 'Temp']]:提前筛选df2的必要列,避免合并后出现冗余列
内容的提问来源于stack exchange,提问作者Simone Panico
相关产品推荐
相关产品推荐

