如何从DataFrame提取停机前的累计在线天数及对应日期?
解决方法
假设你的DataFrame包含Date日期列、col1状态列(0=离线/1=运行),以及已经计算好的col2累计在线天数列,按以下步骤操作:
第一步:标记出停机前的最后一条在线记录
找出所有「当前是运行状态(col1=1)且下一行是离线状态(col1=0)」的行,用shift()方法实现:# 生成标记列,标记符合条件的行 df['is_last_online'] = (df['col1'] == 1) & (df['col1'].shift(-1) == 0)第二步:提取目标数据生成新DataFrame
筛选出标记为True的行,只保留Date和col2列,并重命名col2为DaysOnline,最后重置索引:# 提取数据并整理格式 result_df = df.loc[df['is_last_online'], ['Date', 'col2']].rename(columns={'col2': 'DaysOnline'}).reset_index(drop=True)
补充说明
如果你的col2是从0开始累计的(比如连续4天在线,col2的值是0、1、2、3),那实际在线天数需要加1才能匹配示例结果,只需在提取后加一行:
result_df['DaysOnline'] = result_df['DaysOnline'] + 1
内容的提问来源于stack exchange,提问作者gtk007
相关产品推荐
相关产品推荐

