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

基于另一DataFrame列值的Pandas DataFrame行求和实现需求

解决Pandas按天数计算累计值的问题

首先我们先还原你提供的两个DataFrame:

import pandas as pd

# 构建df1
df1 = pd.DataFrame({
    'A( in days)': [7, 14, 18, 25],
    'B (sum)': [None, None, None, None]
})

# 构建df2
df2 = pd.DataFrame({
    'week': ['WK1', 'WK2', 'WK3', 'WK4', 'WK5'],
    'C(weekly)': [10, 5, 7, 4, 8]
})

接下来我们一步步实现需求:

步骤1:预处理df2,提取周数序号并计算累计和

先从week列提取数字序号,同时计算C(weekly)的累计和,方便后续快速获取完整周的总和:

# 提取周数的数字部分,转为整数
df2['week_num'] = df2['week'].str.extract(r'WK(\d+)').astype(int)
# 计算累计和,比如WK1的累计和是10,WK2是10+5=15,以此类推
df2['cumulative_sum'] = df2['C(weekly)'].cumsum()

处理后的df2会变成:

weekC(weekly)week_numcumulative_sum
WK110110
WK25215
WK37322
WK44426
WK58534

步骤2:定义计算B列的函数

我们写一个函数,输入天数,返回对应的B值:

def calculate_b(days):
    # 计算完整的周数:比如7天=1周,14天=2周,18天=2周(余4天)
    full_weeks = days // 7
    # 计算剩余天数:如果刚好整周,剩余天数为0
    remaining_days = days % 7
    
    # 获取完整周的累计和:full_weeks=1对应WK1的累计和,取索引full_weeks-1的行
    if full_weeks == 0:
        full_sum = 0
    else:
        # 确保不超出df2的周数范围
        if full_weeks > len(df2):
            full_sum = df2['cumulative_sum'].iloc[-1]
        else:
            full_sum = df2['cumulative_sum'].iloc[full_weeks - 1]
    
    # 计算剩余天数对应的部分值
    partial_sum = 0
    if remaining_days > 0:
        # 剩余天数对应的是第full_weeks+1周(比如full_weeks=2,对应WK3)
        target_week_idx = full_weeks
        # 同样要确保不超出范围
        if target_week_idx < len(df2):
            weekly_value = df2['C(weekly)'].iloc[target_week_idx]
            partial_sum = weekly_value * (remaining_days / 7)
    
    # 总和就是完整周累计加剩余部分
    return full_sum + partial_sum

步骤3:将函数应用到df1的A列,填充B列

用apply函数遍历df1的每一行,计算B值:

df1['B (sum)'] = df1['A( in days)'].apply(calculate_b)

运行后df1的结果:

A( in days)B (sum)
710.0
1415.0
1819.0
2524.2857

补充说明

  • 函数里加入了超出df2周数范围的判断:如果输入的天数超过df2所有周的总天数(比如36天,df2只有5周=35天),会取df2的累计总和,不会报错。
  • 代码里的注释尽量详细,方便新手理解每一步的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:21:23