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

如何在Pandas中满足日期条件时仅对指定列执行加法操作

问题

我有一个包含约60列的DataFrame,希望在日期列的值为特定日期时,仅对其中约10列的子集执行简单的数值加法操作。需要通过代码指定要调整的列,例如:

cols=['A', 'B', 'D', 'F']

简化后的示例数据如下:

Date    A B C D E F 
1/1/23  4 7 2 0 0 2
2/1/23  4 1 2 4 0 5
3/1/23  3 7 3 3 0 2
4/1/23  4 4 2 5 2 1
5/1/23  8 9 3 1 2 3
6/1/23  3 1 3 4 0 3

需求:当Date等于5/1/23时,给cols数组中的指定列各加1。注意到你提供的期望结果中目标日期行的指定列是减1操作,若实际需求为减1可对应调整代码。期望的加法结果示例如下:

Date    A B C D E F 
1/1/23  4 7 2 0 0 2
2/1/23  4 1 2 4 0 5
3/1/23  3 7 3 3 0 2
4/1/23  4 4 2 5 2 1
5/1/23  9 10 3 2 2 4
6/1/23  3 1 3 4 0 3
解决方案

可以通过Pandas的布尔索引+列子集定位的方式实现,代码简洁高效,适合处理多列DataFrame:

步骤1:准备数据(确保日期列格式正确)

如果你的Date列是字符串类型,建议先转换为日期格式,避免因格式差异导致匹配失败:

import pandas as pd

# 创建示例DataFrame(实际场景可替换为读取你的数据)
df = pd.DataFrame({
    'Date': ['1/1/23', '2/1/23', '3/1/23', '4/1/23', '5/1/23', '6/1/23'],
    'A': [4, 4, 3, 4, 8, 3],
    'B': [7, 1, 7, 4, 9, 1],
    'C': [2, 2, 3, 2, 3, 3],
    'D': [0, 4, 3, 5, 1, 4],
    'E': [0, 0, 0, 2, 2, 0],
    'F': [2, 5, 2, 1, 3, 3]
})

# 转换Date列为日期类型(format参数根据你的日期格式调整)
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%y')

步骤2:定位目标行并修改指定列

# 指定需要调整的列
cols = ['A', 'B', 'D', 'F']
# 指定目标日期(同样转换为日期类型)
target_date = pd.to_datetime('5/1/23', format='%d/%m/%y')

# 对目标行的指定列执行加法操作
df.loc[df['Date'] == target_date, cols] += 1

# 若实际需求是减1,替换为以下代码:
# df.loc[df['Date'] == target_date, cols] -= 1

执行结果

运行代码后,目标日期行的指定列会完成加法操作,结果如下:

Date   A   B  C  D  E  F
0 2023-01-01   4   7  2  0  0  2
1 2023-01-02   4   1  2  4  0  5
2 2023-01-03   3   7  3  3  0  2
3 2023-01-04   4   4  2  5  2  1
4 2023-01-05   9  10  3  2  2  4
5 2023-01-06   3   1  3  4  0  3

关键说明

  • df.loc[行条件, 列子集]是Pandas中精准修改数据的核心方法,仅对满足条件的行和指定列进行操作,不会影响其他数据。
  • 若你的Date列已经是日期类型,可跳过格式转换步骤,直接用日期对象匹配即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 03:11:22