2017-09-15 159 views
0

我有一個數據框,它從日曆中獲取da Date並從日期中提取某些功能。在熊貓中重複行並添加一個序列列

def processDate(self,date): 
    WEEKDAY_MAP = {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7} 
    df = pandas.DataFrame(data=[date], columns = ['DATE']) 
    df['DATE'] = pandas.to_datetime(df['DATE']) 
    df['DATE'] = df['DATE'].astype(str) 
    df['MONTH'] = pandas.DatetimeIndex(df['DATE']).month 
    df['WEEKDAY'] = pandas.DatetimeIndex(df['DATE']).dayofweek 
    df['WEEKDAY'] = df['WEEKDAY'].map(WEEKDAY_MAP) 
    df['HOLIDAY'] = '0' 
    set_holiday(df) 
    df['INTERVALL'] = '1' 
    df.append([df]*5,ignore_index=True) 
    print(df) 

控制檯登錄:

 DATE  MONTH WEEKDAY HOLIDAY INTERVALL 
    2017-09-13  9  3  0  1 

我需要什麼:重複條目48倍,增加值INTERVALL。

結果應該是這樣的:

控制檯登錄:

 DATE  MONTH WEEKDAY HOLIDAY INTERVALL 
    2017-09-13  9  3  0  1 
    2017-09-13  9  3  0  2 
    2017-09-13  9  3  0  3 
    2017-09-13  9  3  0  4 
    2017-09-13  9  3  0  5 
    ... 
    2017-09-13  9  3  0  48 

我想df.append([df]*48,ignore_index=True)但沒有工作。

回答

3

使用np.repeat並創建一個新的數據幀。

df = pd.DataFrame(df.values.repeat(48, axis=0), columns=df.columns) 
df['INTERVALL'] = df.index + 1 

df.head(10) 

     DATE MONTH WEEKDAY HOLIDAY INTERVALL 
0 2017-09-13  9  3  0   1 
1 2017-09-13  9  3  0   2 
2 2017-09-13  9  3  0   3 
3 2017-09-13  9  3  0   4 
4 2017-09-13  9  3  0   5 

df.shape 
(48, 5) 
+0

不要以爲他們想要兩個間隔列,但這很小。 – miradulo

+0

謝謝!這有效:) –

+0

@Mitch拼寫錯誤...大聲笑。 –

2

或者使用pd.concat

df = pd.concat([df]*48,axis=0).reset_index() 
df['INTERVAL'] = df.index+ 1 
1

您可以使用自己的想法,然後指定一個範圍內的INTERVALL

df= df.append([df]*47,ignore_index=True) 
df["INTERVALL"] = range(1,49) 

請注意,您需要重複47次然後使用範圍從1到48.