2017-09-15 115 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.