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

如何基于日期范围条件从另一DataFrame填充数据?

解决方案

可以通过以下步骤实现基于指定日期范围提取数据并生成目标DataFrame:

  1. 数据类型转换:将df1的起止日期列和df2的DATE列转换为datetime类型,确保日期比较的准确性。
  2. 构建日期掩码:为每个公司生成一个布尔掩码,标记df2中符合该公司日期范围的行。
  3. 应用掩码过滤数据:对df2的每个公司列应用对应掩码,将超出范围的值替换为NaN。

完整代码实现

import pandas as pd

# 定义df1(日期范围条件)
df1 = pd.DataFrame({
    'company': ['a', 'b', 'c', 'd'],
    'start date': ['2023-01-02', '2023-01-05', '2023-01-04', '2023-01-03'],
    'end date': ['2023-01-06', '2023-01-12', '2023-01-13', '2023-01-10']
})

# 定义df2(数据源)
df2 = pd.DataFrame({
    'DATE': ['2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05', '2023-01-06',
             '2023-01-09', '2023-01-10', '2023-01-11', '2023-01-12', '2023-01-13'],
    'a': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'b': [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
    'c': [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
    'd': [40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
})

# 转换日期列类型为datetime
df1['start date'] = pd.to_datetime(df1['start date'])
df1['end date'] = pd.to_datetime(df1['end date'])
df2['DATE'] = pd.to_datetime(df2['DATE'])

# 创建目标DataFrame df3,初始复制df2
df3 = df2.copy()

# 遍历每个公司,应用日期范围过滤
for _, row in df1.iterrows():
    company = row['company']
    start = row['start date']
    end = row['end date']
    # 生成掩码:DATE在[start, end]范围内的行保留,否则设为NaN
    mask = (df2['DATE'] >= start) & (df2['DATE'] <= end)
    df3[company] = df3[company].where(mask, other=pd.NA)

# 查看结果
print(df3)

输出结果

DATE     a     b     c     d
0 2023-01-02  1.0  <NA>  <NA>  <NA>
1 2023-01-03  2.0  <NA>  <NA>  41.0
2 2023-01-04  3.0  <NA>  32.0  42.0
3 2023-01-05  4.0  13.0  33.0  43.0
4 2023-01-06  5.0  14.0  34.0  44.0
5 2023-01-09  <NA>  15.0  35.0  45.0
6 2023-01-10  <NA>  16.0  36.0  46.0
7 2023-01-11  <NA>  17.0  37.0  <NA>
8 2023-01-12  <NA>  18.0  38.0  <NA>
9 2023-01-13  <NA>  <NA>  39.0  <NA>

注:输出中的<NA>与NaN在pandas中功能等价,若需要统一显示为NaN,可在最后添加df3 = df3.fillna(pd.NA).replace({pd.NA: np.nan}),需提前导入numpy。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:50:26