我有不同的纵向数据。我想创建一个";脚手架";将这些数据连接到的数据帧。我有N个纵向个体,我知道每个时间序列组件应该是Y周期长、均匀的纵向段。我正试图找到一种干净的方法来构建这个脚手架数据文件,其中一列表示个人ID,另一列表示时间,而不使用循环。假设Y=10。以下是我所想的两个人的演示:
timeseries = pd.DataFrame(np.arange(10),columns=['DATE'])
block1 = timeseries.copy()
block1['ID'] = 1
block2 = timeseries.copy()
block2['ID'] = 2
example = pd.concat([block1,block2])
example[['ID','DATE']]
用循环N次来构建这个并不是世界末日,但必须有更好的方法。
在列表理解中使用assign
和concat
:
Y = 10
example = pd.concat([timeseries.assign(ID=n+1) for n in range(Y)])[['ID', 'DATE']]
备选方案:
Y = 10
example = (pd.concat([timeseries]*Y)
.assign(ID=lambda d: np.arange(len(d))//len(timeseries)+1)
[['ID', 'DATE']]
)
输出:
ID DATE
0 1 0
1 1 1
2 1 2
3 1 3
4 1 4
.. .. ...
5 10 5
6 10 6
7 10 7
8 10 8
9 10 9
[100 rows x 2 columns]