簡體   English   中英

Python:根據另一個數據框中的開始日期和結束日期在數據框中創建新列

[英]Python: Creating New Column in Dataframe based on Start and End Dates in Another Dataframe

我有以下數據框,表示特定季度的開始和結束日期:

在此處輸入圖片說明

我下面的函數采用一個現有的數據集(未顯示),並創建一個名為“ 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,則“四分之一”列應為空白,因為它超出了范圍。 但它仍將其標記為Q1。

*任何幫助是極大的贊賞。

嘗試將pandas作為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM