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

如何用Python按条件计算数据集每日列值求和并新增列

解决方案:大数据集按日条件求和并添加新列

嘿,我来帮你搞定这个大数据集的按日条件求和问题!用pandas来处理这类需求简直是绝配,尤其是你的数据集有几千条记录,向量化操作能帮你省不少时间,比逐行循环高效太多了。

步骤1:准备测试数据(还原你的数据集)

首先我们把你给出的测试数据转换成pandas DataFrame,方便后续操作:

import pandas as pd
import numpy as np

# 你的测试数据集
data = {
    'id': [0, 1, 2, 3, 4],
    'col2': [3, 3, 3, 2, 2],
    'col3': [0, 40, 30, 23, 33],
    'col4': [50, 35, 30, 14, 33],
    'timestamp': ['1-12-2018', '1-12-2018', '1-12-2018', '2-12-2018', '2-12-2018']
}

df = pd.DataFrame(data)

步骤2:生成符合条件的待求和值

根据你给出的两个条件,我们用np.where(向量化操作,效率拉满)生成一个临时列value_to_sum,用来存储每条记录要参与求和的值:

# 条件1:col3 < col4时取col4;条件2:col3 >= col4时取col3
df['value_to_sum'] = np.where(df['col3'] < df['col4'], df['col4'], df['col3'])

为什么不用apply?因为apply是逐行处理,几千条数据的话速度会慢很多,np.where是整列批量处理,效率高不止一个档次。

步骤3:按日期分组计算每日总和并添加新列

接下来我们按timestamp(日期)分组,用transform方法把每日的总和广播到对应日期的每条记录里,直接生成新列daily_total:

# 按日期分组求和,并将总和赋值给每条记录的新列
df['daily_total'] = df.groupby('timestamp')['value_to_sum'].transform('sum')

这里用transform而不是普通的sum,是因为普通sum只会返回每个组的结果,而transform会把结果匹配回原DataFrame的每条记录,完美符合你“将结果存入新列”的需求。

可选:清理临时列

如果不需要保留value_to_sum这个临时列,可以直接删掉:

df.drop('value_to_sum', axis=1, inplace=True)

额外优化:确保日期格式正确

如果你的原始数据中timestamp是字符串格式,建议先转换成datetime类型,避免因为格式问题导致分组错误:

# 将timestamp转换为datetime类型(格式是日-月-年)
df['timestamp'] = pd.to_datetime(df['timestamp'], format='%d-%m-%Y')

最终结果展示

处理后的数据集会变成这样:

idcol2col3col4timestampdaily_total
030502018-12-01120
1340352018-12-01120
2330302018-12-01120
3223142018-12-0256
4233332018-12-0256

可以看到,12月1日的总和是50+40+30=120,12月2日的总和是23+33=56,完全符合你的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:37:11