在pandas中重复行并添加序列列

时间:2017-09-15 14:40:09

标签: python pandas dataframe

我有一个数据框,它从日历中获取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 个答案:

答案 0 :(得分: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)

答案 1 :(得分:3)

或使用pd.concat

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

答案 2 :(得分:1)

您可以使用自己的想法,然后为INTERVALL

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

请注意,您需要复制47次,然后使用1到48之间的范围。