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)
我真的很感谢任何更好的想法
让我们尝试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)
| 归档时间: |
|
| 查看次数: |
591 次 |
| 最近记录: |