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

在R中按特定条件将两个DataFrame的值匹配填充至目标DataFrame

基于月份与mbs匹配填充DataFrame的解决方案

1. 统一月份匹配键

首先需要将所有DataFrame的month列处理为忽略日的年月标识,避免日期天的差异导致匹配失效。假设month列是datetime类型,若不是需先转换:

import pandas as pd

# 转换month列为datetime(若原始类型不是)
for df in [DF1, DF2, DF3]:
    df['month'] = pd.to_datetime(df['month'])
# 提取年月作为匹配键
for df in [DF1, DF2, DF3]:
    df['month_key'] = df['month'].dt.to_period('M')

2. 匹配DF1数据并填充至DF3

假设DF1需要填充到DF3的列是col_a、col_b(替换为你的实际列名),通过左连接匹配month_key和mbs,不匹配项填充0:

# 提取DF1的匹配键与目标列
df1_merge = DF1[['month_key', 'mbs', 'col_a', 'col_b']]
# 左连接到DF3
DF3 = DF3.merge(df1_merge, on=['month_key', 'mbs'], how='left')
# 空值替换为0
DF3[['col_a', 'col_b']] = DF3[['col_a', 'col_b']].fillna(0)

3. 匹配DF2数据并填充至DF3

同理处理DF2,假设需填充的列是col_c、col_d:

# 提取DF2的匹配键与目标列
df2_merge = DF2[['month_key', 'mbs', 'col_c', 'col_d']]
# 左连接到DF3
DF3 = DF3.merge(df2_merge, on=['month_key', 'mbs'], how='left')
# 空值替换为0
DF3[['col_c', 'col_d']] = DF3[['col_c', 'col_d']].fillna(0)

4. 清理临时列(可选)

若不需要保留month_key临时列,可删除:

DF3.drop('month_key', axis=1, inplace=True)

关键注意点

  • 确保三个DataFrame的mbs列数据类型一致(如均为字符串或数值),否则会出现匹配失败
  • 若DF1/DF2存在重复的month_key+mbs组合,需先去重或聚合(如取均值、保留最新行):
    # 示例:DF1按匹配键去重,保留最后一行
    df1_merge = df1_merge.drop_duplicates(subset=['month_key', 'mbs'], keep='last')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:01:17