我计算了一堆具有共同索引的Pandas系列。我想从他们构建一个Pandas multiindex框架。以下是我想要的结构。
X Y Z
DATE
2018-01-01 A NaN NaN NaN
B NaN NaN NaN
C NaN NaN NaN
2018-01-02 A NaN NaN NaN
B NaN NaN NaN
C NaN NaN NaN
所以(:,A,X)将是一个系列。 (:,A,Y)另一个等等。我该怎么做呢?
以下是我的内容
import pandas as pd
import numpy as np
idx = pd.date_range("20180101", periods=10)
s_1 = pd.Series(np.random.randint(0,10,size=10), index=idx)
s_2 = pd.Series(np.random.randint(0,10,size=10), index=idx)
s_3 = .... all the way to s9
编辑:假设我想将s_1映射到(A,X),s_2到(A,Y),s_3到(A,Z),s_4到(B,X)等。
答案 0 :(得分:0)
您需要先向您提供的Series
添加一些信息,即它们所属的列和多索引级别:
def add_idx_and_name(s, idx_name, col_name):
#Create multi-index DataFrames from s
s = s.reset_index()
s['idx'] = idx_name
s = s.set_index(['index', 'idx'])
s.rename(columns={0: col_name}, inplace=True)
return s
然后将此信息添加到您的系列中(它们现在是DataFrame
s):
s_1 = add_idx_and_name(s_1, 'A', 'X')
s_2 = add_idx_and_name(s_2, 'A', 'Y')
s_3 = add_idx_and_name(s_3, 'A', 'Z')
s_4 = add_idx_and_name(s_4, 'B', 'X')
....
然后连接
pd.concat([pd.concat([s_1, s_2, s_3], axis=1),
pd.concat([s_4, s_5, s_6], axis=1),
pd.concat([s_7, s_8, s_9], axis=1)]).sort_index()
输出(我使用np.random.seed(123)
)
X Y Z
index idx
2018-01-01 A 2 9 7
B 9 3 0
C 2 0 2
2018-01-02 A 2 0 3
B 3 5 6
C 4 8 3
2018-01-03 A 6 0 2
B 4 0 4
C 8 1 3
...