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

如何基于两个DataFrame的多条件为DF1生成新列?

解决方案

核心思路

先统一数据格式,将DF2从宽表转为长表以便和DF1的「Technology」「Status」匹配,再通过日期运算生成目标列。

代码实现

import pandas as pd

# 构建示例数据
df1 = pd.DataFrame({
    "Current Date": ["18/03/2022", "15/02/2022", "24/01/2022", "23/09/2020",
                    "18/11/2021", "25/06/2020", "27/02/2020", "10/03/2022"],
    "Technology": ["Wind", "Solar", "Battery", "Wind",
                   "Solar", "Solar", "Wind", "Battery"],
    "Status": ["Construction", "Construction", "Application approved", "Application approved",
               "Application submitted", "Application approved", "Application submitted", "Application submitted"]
})

df2 = pd.DataFrame({
    "Technology": ["Battery", "Solar Photovoltaics", "Wind"],
    "Application submitted": [730, 730, 1825],
    "Application approved": [273.75, 273.75, 912.5],
    "Construction": [273.75, 273.75, 1095]
})

# 1. 转换DF1的日期列为可运算的datetime类型
df1["Current Date"] = pd.to_datetime(df1["Current Date"], format="%d/%m/%Y")

# 2. 重塑DF2为长格式,同时统一技术名称(匹配DF1的"Solar")
df2_long = df2.melt(
    id_vars="Technology",
    var_name="Status",
    value_name="Days"
).replace({"Solar Photovoltaics": "Solar"})

# 3. 按Technology和Status匹配天数
merged_df = df1.merge(df2_long, on=["Technology", "Status"], how="left")

# 4. 计算新日期并格式化为dd/mm/yyyy样式
merged_df["New Date"] = (merged_df["Current Date"] + pd.to_timedelta(merged_df["Days"], unit="D")).dt.strftime("%d/%m/%Y")

# 输出结果(保留目标列)
print(merged_df[["Current Date", "Technology", "Status", "New Date"]])

运行结果

Current DateTechnologyStatusNew Date
2022-03-18WindConstruction16/12/2025
2022-02-15SolarConstruction15/11/2022
2022-01-24BatteryApplication approved24/10/2022
2020-09-23WindApplication approved24/03/2023
2021-11-18SolarApplication submitted18/11/2023
2020-06-25SolarApplication approved25/03/2021
2020-02-27WindApplication submitted25/02/2025
2022-03-10BatteryApplication submitted09/03/2024

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:15:31