比对不同长度DataFrame时间戳并完成指定格式合并
问题描述
我有两个DataFrame:
import pandas as pd df1 = pd.DataFrame({ 'date': ['2023-01-01 16:00:00', '2023-01-01 16:15:00', '2023-01-01 16:30:00', '2023-01-01 16:45:00', '2023-01-01 17:00:00', '2023-01-01 17:15:00', '2023-01-01 17:30:00'], 'col1': [100, 120, 140, 160, 200, 430, 890], 'col2': [200, 400, 500, 700, 300, 200, 100] }) df2 = pd.DataFrame({ 'date': ['2023-01-01 16:00:00', '2023-01-01 16:15:00', '2023-01-01 17:00:00'], 'col3': [1, 1, 1] })
已通过df2['date'].isin(df1['date']).all()验证df2['date']的所有时间戳都存在于df1['date']中。
需要将df1与df2合并,生成如下格式的新DataFrame df_new:
df_new = pd.DataFrame({ 'date': ['2023-01-01 16:00:00', '2023-01-01 16:15:00', '2023-01-01 16:30:00', '2023-01-01 16:45:00', '2023-01-01 17:00:00', '2023-01-01 17:15:00', '2023-01-01 17:30:00'], 'col1': [100, 120, 140, 160, 200, 430, 890], 'col2': [200, 400, 500, 700, 300, 200, 100], 'col3': [1, 1, 0, 0, 1, 0, 0] })
要求保留df1的所有行,匹配时间戳的col3值为1,不匹配的为0。
解决方案
方法1:左连接合并后填充缺失值
利用左连接保留df1的全部行,再将合并后col3的缺失值替换为0:
df_new = df1.merge(df2, on='date', how='left').fillna({'col3': 0}) # 可选:将col3转为整数类型 df_new['col3'] = df_new['col3'].astype(int)
方法2:直接生成匹配标记列
通过判断df1['date']是否在df2['date']的集合中,直接创建col3列,这种方法效率更高:
date_set = set(df2['date']) df_new = df1.copy() df_new['col3'] = df1['date'].isin(date_set).astype(int)
内容的提问来源于stack exchange,提问作者Pythoneer
相关产品推荐
相关产品推荐

