【问题标题】:Python: Creating New Column in Dataframe based on Start and End Dates in Another DataframePython:根据另一个数据框中的开始和结束日期在数据框中创建新列
【发布时间】:2017-01-11 03:49:25
【问题描述】:

我有以下数据框表示特定季度的开始和结束日期:

下面的函数采用现有数据集(未显示)并创建一个名为“Quarter”的新列。如果我现有数据集中的日期在上述数据框中的开始日期和结束日期之内,则新的“季度”列将获得一个标签(即 Q1 或 Q2)。否则我希望它是空白的。

# dynamic function for quarterly cuts

    def quarters(df, df_quarters):
        for i, m in df.iterrows():
            for j, (Quarter, Start_Date, End_Date) in df_quarters.iterrows():
                if (m['date'] >= Start_Date) & (m['date'] <= End_Date):
                    df.set_value(i, 'Quarter', Quarter)
                    break 

    quarters(WSI_Hourly, df_quarters)

我上面写的函数可以工作,但是有问题。它仍然在我的数据集中将 2016、1、1 之前的任何日期标记为 Q1。例如,如果我有一个日期,例如 2015、12、3,则 Quarter 列应该是空白的,因为它超出了范围。但它仍然将其标记为 Q1。

*非常感谢任何帮助。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    试试 将熊猫导入为 pd 将 numpy 导入为 np

    df1 = pd.DataFrame({'StartDate': pd.date_range('2016-01-01', periods=9, freq='5D'), 'EndDate': pd.date_range('2016-01-04', periods=9, freq='5D'), 'Quarter': np.arange(1, 10, 1)})
    
    df2 = pd.DataFrame(dict(values=np.random.randn(10), date_time=pd.date_range('2016-01-01', periods=10, freq='D')))
    
    df2['Quarter'] = np.piecewise(np.zeros(len(df2)), [(df2.date_time.values >= start_date)&(df2.date_time.values <= end_date) for start_date, end_date in zip(df1.StartDate.values, df1.EndDate.values)], df1.Quarter.values)
    
    print df1
    
    print df2
    

    输入数据

            EndDate  Quarter  StartDate
    0 2016-01-04        1 2016-01-01
    1 2016-01-09        2 2016-01-06
    2 2016-01-14        3 2016-01-11
    3 2016-01-19        4 2016-01-16
    4 2016-01-24        5 2016-01-21
    5 2016-01-29        6 2016-01-26
    6 2016-02-03        7 2016-01-31
    7 2016-02-08        8 2016-02-05
    8 2016-02-13        9 2016-02-10
    

    输出

       date_time    values  Quarter
    0 2016-01-01  0.074264      1.0
    1 2016-01-02  0.621282      1.0
    2 2016-01-03  0.398398      1.0
    3 2016-01-04 -3.435242      1.0
    4 2016-01-05 -1.613446      0.0
    5 2016-01-06  1.256619      2.0
    6 2016-01-07  0.835417      2.0
    7 2016-01-08 -0.532238      2.0
    8 2016-01-09  0.047838      2.0
    9 2016-01-10  0.598660      0.0
    

    【讨论】:

      猜你喜欢
      • 2021-07-11
      • 1970-01-01
      • 2020-02-23
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多