如何处理同尺寸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
相关产品推荐
相关产品推荐

