在数据框中为反向索引顺序添加条目

时间:2019-06-03 13:40:44

标签: python pandas data-analysis

我必须绘制来自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循环来做到这一点,但是我很确定有更好的方法来做到这一点...您知道如何有效地做到这一点吗?

2 个答案:

答案 0 :(得分:3)

尝试使用pd.concatswaplevel

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
相关问题