将数据帧格式化为等长时间序列格式

Format dataframe to equal length time-series format

我有一个数据框

time.   item.   value1.   value2
-----------------------------------
1       1       3           4
2       1       2           5
1       2       3           5
3       2       2           1
2       3       3           6
3       3       2           5

我想把它改成下面的样子

time.   item.   value1.   value2
-----------------------------------
1       1       3           4
2       1       2           5
3       1       nan         nan
1       2       3           5
2       2       nan         nan
3       2       2           1
1       3       nan         nan
2       3       3           6
3       3       2           5

其中所有项目的时间范围都相同,如果 value1 和 value2 不在原始数据框中,则为 nans。我用外部连接做了一些试验,但没有成功。

有简单的方法吗?

您可以将timeitem设置为索引,然后使用df.reindex with pd.MultiIndex.from_product

time = df['time'].unique()
item = df['item'].unique()
idx = pd.MultiIndex.from_product([item, time],names=['item', 'time']).swaplevel(0,1)
df.set_index(['time', 'item']).reindex(idx).reset_index()

   time  item  value1  value2
0     1     1     3.0     4.0
1     2     1     2.0     5.0
2     3     1     NaN     NaN
3     1     2     3.0     5.0
4     2     2     NaN     NaN
5     3     2     2.0     1.0
6     1     3     NaN     NaN
7     2     3     3.0     6.0
8     3     3     2.0     5.0