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

如何处理同尺寸DataFrame:构建交错DataFrame及None值替换

解决方案

1. 准备原始数据

先将你提供的字典转换为pandas DataFrame:

import pandas as pd

data1 = {
    "product": ['A', "B", "C", "D"],
    "2022-01": [1, 2, 3, 4],
    "2022-02": [1, 2, 3, 4],
    "2022-03": [1, 2, 3, 4]
}

data2 = {
    "product": ['A', "B", "C", "D"],
    "2022-01": [13, "None", 15, 16],
    "2022-02": [17, 18, "None", 20],
    "2022-03": ["None", 22, 23, "None"]
}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

2. 创建交错结构的DataFrame(data3)

提取日期列后,逐个将df1的日期列与重命名后的df2对应列(添加- flag后缀)交错拼接:

# 筛选出所有日期列(排除product列)
date_cols = [col for col in df1.columns if col != "product"]

# 初始化列列表,先加入product列
data3_components = [df1[["product"]]]

# 遍历每个日期列,交错添加原列和flag列
for col in date_cols:
    data3_components.append(df1[[col]])
    # 重命名df2的列并添加到列表
    flag_col = df2[[col]].rename(columns={col: f"{col} - flag"})
    data3_components.append(flag_col)

# 拼接所有列得到data3
data3 = pd.concat(data3_components, axis=1)
print(data3)

输出结果与你提供的data3结构完全一致(注:你示例中data1的2022-02数值为[5,6,7,8]属于笔误,若需对应只需修改原始data1的数值即可)。

3. 创建替换None后的DataFrame(data4)

先将df2中的字符串"None"转为真正的缺失值,再将df1中对应df2缺失的位置替换为None:

# 清理df2:将字符串"None"转为Python的None
df2_clean = df2.replace("None", None)

# 复制df1作为基础,替换对应位置的数值
data4 = df1.copy()
data4[date_cols] = df1[date_cols].where(df2_clean[date_cols].notna(), None)
print(data4)

运行后得到的data4会将df2中的None位置同步到df1的对应位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:10:41