【问题标题】:Merging two dataframe by date按日期合并两个数据框
【发布时间】:2019-08-18 07:53:06
【问题描述】:

我有两个数据框,使用 pandas,一个 (df_1) 是一年中某一天的平均温度,直到某个时间点(例如 2014 年到 2014 年 3 月 1 日的所有日子的平均温度)和other (df_2) 是过去 30 年的日平均温度。

我想要做的是在第二个中按天的平均值完成第一个数据帧,由于一些闰年,我不能使用一年中的某一天,但我不确定这是正确的方法。我找到了一种获取每日平均温度(Get the average year (mean of days over multiple years) in Pandas)的方法来获取 df_3。我的最终目标是在缺失的日子里完成 df_1(所以 04/01/2014,...,31/12/2014)

df_1 = pd.DataFrame({
               'Date': ['01/01/2014','02/01/2014','03/01/2014'], 'T_Avg_2014': [5,6,0.7]})

df_2 = pd.DataFrame({
               'Date': ['01/01/2009','02/01/2010','01/01/2011'], 'T_Avg': [5,-8,-7]})




index = pd.MultiIndex.from_tuples([('1', '1'),
                                   ('1', '2'),
                                  ('1', '3'),
                                   ('2', '1')],
                                 names=['month', 'day'])
columns = [('T_Avg')]
df_3 = pd.DataFrame([3,4,8,10],
                 index=index,
                 columns=columns)

【问题讨论】:

    标签: python pandas date dataframe


    【解决方案1】:

    以下是实现此目的的方法:

    from datetime import datetime
    import numpy as np
    import pandas as pd
    
    # Create date ranges
    date1 = pd.date_range(datetime(2014,1,1), datetime(2014,3,1)) # 2014
    date2 = pd.date_range(datetime(1983,1,1), datetime(2013,12,31)) # 30 years
    
    # Create data frames
    df1 = pd.DataFrame({'temperature': np.random.rand(len(date1))*100}, index = date1)
    df2 = pd.DataFrame({'temperature': np.random.rand(len(date2))*100}, index = date2)
    
    # Compute average daily temperature from 30 year data
    df3 = df2.groupby([df2.index.month, df2.index.day]).mean()
    df3 = df3.reset_index().rename(columns={'level_0': 'month', 'level_1': 'day'})
    
    # Get data to use to complete df1
    idx = df3.index[(df3.month == 3) & (df3.day == 1)][0] + 1 # All past March 1st
    data_fill = df3.loc[idx:, ['month', 'day', 'temperature']]
    data_fill['date_time'] = pd.to_datetime(data_fill.month.map(str)+'-'+data_fill.day.map(str)+'-2014')
    data_fill = data_fill.set_index('date_time')
    data_fill = data_fill.drop(columns=['month', 'day'])
    
    # Combine data frames
    df4 = pd.concat([df1, data_fill])
    
    # Visualize data
    df4.plot()
    

    请注意 3 月 1 日之后的数据是如何平滑的,因为它是随机生成数据的 30 年平均值,而前 2 个月的数据尚未平均。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      • 1970-01-01
      • 2021-10-05
      • 2016-12-10
      • 2019-08-08
      相关资源
      最近更新 更多