我必须绘制来自multindex熊猫数据框的数据的条形图。该数据框具有以下结构:
value
1 2 25
3 96
4 -12
...
2 3 -25
4 -30
...
3 4 541
5 396
6 14
...
请注意,索引条目(1,2)有一个值,但(2,1)没有一个值。总是有一个y> x的索引条目(x,y),我想为每个具有相同值的条目(x,y)创建一个条目(y,x)。基本上,我想使我的数据帧矩阵对称。我尝试过通过切换索引级别,然后将结果串联到一个新的数据帧中,但无法获得所需的结果。也许我可以使用for循环来做到这一点,但是我很确定有更好的方法来做到这一点...您知道如何有效地做到这一点吗?
答案 0 :(得分:3)
尝试使用pd.concat
和swaplevel
:
pd.concat([df, df.swaplevel(0,1)])
输出:
value
x y
1 2 25
3 96
4 -12
2 3 -25
4 -30
3 4 541
5 396
6 14
2 1 25
3 1 96
4 1 -12
3 2 -25
4 2 -30
3 541
5 3 396
6 3 14
答案 1 :(得分:2)
您可以取消堆叠,转置,再次堆叠并合并到原始系列:
new_df = pd.concat( (df.value, df.value.unstack(level=1).T.stack()))
玩具数据:
idx = [(a,b) for b in range(1,4) for a in range(1, b)]
idx = pd.MultiIndex.from_tuples(idx)
np.random.seed(10)
df = pd.DataFrame({'value': np.random.randint(-100,100, len(idx))}, index=idx)
df.sort_index(inplace=True)
# df:
# value
# 1 2 -91
# 3 25
# 2 3 -85
输出(new_df
):
1 2 -91.0
3 25.0
2 3 -85.0
1 -91.0
3 1 25.0
2 -85.0
dtype: float64