You need to enable JavaScript to run this app. 如何根据列名与Dataframe中Date列值匹配计算对应行单元格值?
优惠活动
大模型
产品
解决方案
定价
更多

如何根据列名与Dataframe中Date列值匹配计算对应行单元格值?

Pandas DataFrame 匹配赋值实现方案

前提准备

  • 基于Python pandas 库实现,若未安装可先执行pip install pandas安装,导入语法为import pandas as pd
  • 提前加载好你的原始DataFrame
  • 确保列名、Date列的内容格式统一(比如都是字符串格式的日期文本,避免类型不一致导致匹配失败)

实现步骤

1. 提取需要做匹配的目标列

排除不需要处理的Date列,得到所有待判断的日期类列:

# 筛选出除Date列之外的所有列,也就是列标题为"1 Oct"、"1 Nov"这类的列
target_cols = [col for col in df.columns if col != "Date"]

如果担心类型不匹配,可先统一转成字符串格式:

# 统一列名和Date列的类型为字符串,避免匹配失效
df.columns = df.columns.astype(str)
df["Date"] = df["Date"].astype(str)

2. 执行匹配赋值

新手友好版(逻辑直观,易调试)

逐行逐列判断,匹配成功赋值1,失败赋值Null(用pandas内置的pd.NA表示空值):

# 遍历每一行的索引和数据
for row_idx, row_data in df.iterrows():
    # 获取当前行的Date值
    current_row_date = row_data["Date"]
    # 遍历每个待判断的目标列
    for col_name in target_cols:
        # 列名和当前Date值相等则赋值1,否则赋值空值
        if col_name == current_row_date:
            df.loc[row_idx, col_name] = 1
        else:
            df.loc[row_idx, col_name] = pd.NA

高效版(适合数据量较大的场景,无需逐行循环)

利用pandas的向量化广播机制批量计算,运行速度远快于逐行循环:

# 生成匹配矩阵:逐行对比列名和当前行的Date值,得到布尔值矩阵
match_result = (df[target_cols].values == df["Date"].values[:, None])
# 把布尔结果转成整数(True=1,False=0),再将0值替换为空值
df[target_cols] = match_result.astype("Int64").replace(0, pd.NA)

效果验证

运行完上述代码后,直接打印DataFrameprint(df),即可得到预期的结构:匹配位置为1,未匹配位置为Null,Date列保持原有值不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 03:45:04