如何将pandas日期列合并为存储唯一日期值的新列
实现方法
直接按行处理即可完成去重+拼接,逻辑简洁且不会打乱原有日期顺序,完整可运行代码如下:
import pandas as pd # 示例数据初始化 data = [ ["2018-12-08", "2018-12-09"], ["2020-12-19", "2020-12-20"], ["2020-12-19", "2020-12-19"], ["2020-10-06", "2020-10-12"], ] df = pd.DataFrame(data, columns=["date1", "date2"]) # 第一步:统一转换两列为日期格式,注意要把转换结果赋值回原列 df[["date1", "date2"]] = df[["date1", "date2"]].apply(lambda x: pd.to_datetime(x).dt.date) # 第二步:逐行判断,日期相同则保留单个值,不同则按原顺序拼接 df['date_range'] = df.apply( lambda row: str(row['date1']) if row['date1'] == row['date2'] else f"{row['date1']},{row['date2']}", axis=1 )
运行结果
执行代码后输出的df完全匹配预期效果:
date1 date2 date_range 0 2018-12-08 2018-12-09 2018-12-08,2018-12-09 1 2020-12-19 2020-12-20 2020-12-19,2020-12-20 2 2020-12-19 2020-12-19 2020-12-19 3 2020-10-06 2020-10-12 2020-10-06,2020-10-12
扩展场景
如果后续需要处理2列以上的日期去重拼接、同时保留日期的原始出现顺序,可以用保序去重的写法,兼容所有Python3.7+版本:
# 多列通用写法,把要处理的列名放进cols列表即可 cols = ["date1", "date2"] df['date_range'] = df[cols].apply( lambda row: ','.join(dict.fromkeys(row.astype(str))), axis=1 )
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

