在数据框中每行创建多个新行

Yan*_*ron 4 python dataframe pandas

我有以下 df:

    ID              data
0   123123          1
1   123412          1
2   123123          1
3   234234          2
4   432424          2
Run Code Online (Sandbox Code Playgroud)

我想要知道的是根据 id 每行添加 x 个新行。更具体地说,我想添加一个新列,其中包含 7 天范围内的日期,然后添加一个新行,其中包含 df 中每个 ID 的日期。

因此,如果我们说我只想要 2 天范围内的日期,那么输出应该如下所示:

    ID              data   date
0   123123          1      2020-02-01
0   123123          1      2020-02-02
1   123412          1      2020-02-01
1   123412          1      2020-02-02
2   123123          1      2020-02-01
2   123123          1      2020-02-02
3   234234          2      2020-02-01
3   234234          2      2020-02-02
4   432424          2      2020-02-01
4   432424          2      2020-02-02
Run Code Online (Sandbox Code Playgroud)

我想过用循环来做,但是这个想法看起来真的很慢而且效率不高。

df = pd.DataFrame(columns=['ID','data','date'])
for date in pd.date_range(start=dateRange[0],end=dateRange[1]):
    for row in df_old:
        df = df.append({'ID': row['ID'], 'data': row['data'], 'date': date}, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

我真的很感谢任何更好的想法

WeN*_*Ben 5

让我们尝试assign一下melt

out = df.assign(**{'date1':'2020-02-01','date2':'2020-02-02'}).melt(['ID','data']).sort_values('ID')
       ID  data variable       value
0  123123     1    date1  2020-02-01
2  123123     1    date1  2020-02-01
5  123123     1    date2  2020-02-02
7  123123     1    date2  2020-02-02
1  123412     1    date1  2020-02-01
6  123412     1    date2  2020-02-02
3  234234     2    date1  2020-02-01
8  234234     2    date2  2020-02-02
4  432424     2    date1  2020-02-01
9  432424     2    date2  2020-02-02
Run Code Online (Sandbox Code Playgroud)