You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于日期与组件汇总DataFrame故障时长的Python实现求助

解决方法

我们可以通过统一日期格式、分步计算的方式实现需求,以下是针对新手友好的代码实现:

1. 导入库并构造示例数据

import pandas as pd

# 构造故障记录df1
df1 = pd.DataFrame({
    'Failure Date': ['09/25/2022', '09/27/2022', '09/29/2022'],
    'Component': ['A1', 'A2', 'A1']
})

# 构造每日运行时长df2
df2 = pd.DataFrame({
    'Date': ['09/30/2022', '09/29/2022', '09/28/2022', '09/27/2022', '09/26/2022', '09/25/2022', '09/24/2022', '09/23/2022'],
    'A1': [5, 2, 0, 0, 0, 8, 0, 9],
    'A2': [5, 0, 0, 5, 0, 0, 5, 5]
})

2. 日期格式转换

将字符串日期转为datetime类型,才能正确进行日期大小比较:

df1['Failure Date'] = pd.to_datetime(df1['Failure Date'], format='%m/%d/%Y')
df2['Date'] = pd.to_datetime(df2['Date'], format='%m/%d/%Y')

3. 计算各组件总运行时长

直接对组件列求和,转成字典方便后续匹配:

total_time_dict = df2[['A1', 'A2']].sum().to_dict()
# 结果为:{'A1': 24, 'A2': 20}

4. 计算单个故障的累计运行时长

定义函数处理每行故障数据,筛选故障日及之前的记录并求和:

def get_failure_accum_time(row):
    # 筛选df2中日期<=当前故障日期的行
    valid_records = df2[df2['Date'] <= row['Failure Date']]
    # 返回对应组件的时长总和
    return valid_records[row['Component']].sum()

# 给df1添加累计时长列
df1['Failure Times'] = df1.apply(get_failure_accum_time, axis=1)

5. 匹配总运行时长

通过组件列映射对应的总时长:

df1['Total Time'] = df1['Component'].map(total_time_dict)

6. 生成最终结果

提取需要的两列即可:

final_result = df1[['Failure Times', 'Total Time']]
print(final_result)

运行后输出结果:

Failure Times  Total Time
0             17          24
1             15          20
2             19          24

(注:示例中第三行Total Time为空,实际根据df2计算A1总时长为24,此处按真实数据填充)

关键说明

  • 日期转换是核心前提:字符串日期无法直接比较,必须转为datetime类型才能筛选故障日之前的记录
  • apply方法可逐行处理df1,自动匹配每行的组件和故障日期计算累计时长
  • map方法比循环更高效,能快速将组件总时长映射到对应行

内容的提问来源于stack exchange,提问作者Harshstorm32

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:10:38