Python Pandas处理Excel表格:日期列上移匹配描述行问题
Pandas处理Excel:将日期行匹配到对应描述行
我是Python新手,用Pandas处理Excel表格时碰到个问题:
已经完成这些操作:去除日期行重复值,拆分出仅含日期的DataFrame和仅含描述的DataFrame,删除最后一行。
现在需要把A列的日期上移到对应描述行的B列,但存在某行(黄色标记行)下方无对应日期的情况,要实现目标效果。
解决方案
结合你的现有代码,我们可以通过日期填充+过滤的方式实现需求,具体代码如下:
import pandas as pd from datetime import datetime # 读取Excel数据(你的原有代码) df_cdms_labour = pd.read_excel(test_cdms, header=None, names=['start_date', 'end_date', 'price','percent', 'comment','rate', 'rate_comment','number_1','markup','markup_number']) # 删除最后一行(你的原有代码) df_cdms_labour.drop(df_cdms_labour.tail().index, inplace=True) # 1. 标记哪些行是日期行 df_cdms_labour['is_date_row'] = df_cdms_labour['start_date'].apply(lambda x: isinstance(x, datetime)) # 2. 填充日期:将日期行的日期值向下传递给后续的描述行,直到下一个日期行出现 df_cdms_labour['target_date'] = df_cdms_labour['start_date'].where(df_cdms_labour['is_date_row']).ffill() # 3. 过滤掉原本的日期行,只保留描述行,同时重置索引 df_final = df_cdms_labour[~df_cdms_labour['is_date_row']].reset_index(drop=True) # 4. 将填充好的日期放到B列(对应你的end_date列) df_final['end_date'] = df_final['target_date'] # 查看处理后的结果 print(df_final)
代码说明
is_date_row列:用来区分日期行和描述行,方便后续处理;where+ffill():只保留日期行的start_date值,其他行设为NaN,再用ffill()(向前填充)把最近的日期值传递给下面的所有描述行,包括那行没有后续日期的黄色标记行;- 最后过滤掉日期行,得到的就是每个描述行都匹配好对应日期的结果。
内容的提问来源于stack exchange,提问作者BrunoA
相关产品推荐
相关产品推荐

