将数据帧格式化为等长时间序列格式
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。我用外部连接做了一些试验,但没有成功。
有简单的方法吗?
您可以将time
、item
设置为索引,然后使用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
我有一个数据框
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。我用外部连接做了一些试验,但没有成功。
有简单的方法吗?
您可以将time
、item
设置为索引,然后使用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