交换了索引列的Pandas DataFrame重复行

时间:2013-07-08 07:42:35

标签: python pandas

我想对图形进行以下表示(边缘从n1n2)对称,这意味着我想复制DataFrame的每一行并交换节点。

数据准备(实际上,我是从具有固定结构的电子表格中导入的):

import pandas as pd
df = pd.DataFrame({'n1':[1,1,2], 
                   'n2':[2,3,4], 
                   'L':[10,20,40], 
                   'D':[5,6,7]})
df = df.set_index(['n1','n2'])

在:

       D   L
n1 n2
1  2   5  10
   3   6  20
2  4   7  40

后:

       D   L
n1 n2
1  2   5  10
   3   6  20
2  4   7  40
   1   5  10
3  1   6  20
4  2   7  40

2 个答案:

答案 0 :(得分:1)

一种简单的方法是复制df并自己反转索引,然后将它们一起追加。

df2 = df1
df2.index.names = ['n2','n1']
df2 = df2.reorder_levels(['n1','n2'])

df1.append(df2)

       D   L
n2 n1       
1  2   5  10
   3   6  20
2  4   7  40
   1   5  10
3  1   6  20
4  2   7  40

答案 1 :(得分:0)

不是答案,而是为了说明上述讨论:

DF1:

print df1

       D   L
n1 n2       
1  2   5  10
   3   6  20
2  4   7  40

df2 = df1.copy()

# these have the same result:
# df2 = pd.DataFrame(df1)
# df2 = copy.copy(df1)

df2.index.names = ['n2','n1']
df2.columns =['X','Y']
df2 = df2 * 3

DF2:

print df2

        X    Y
n2 n1         
1  2   15   30
   3   18   60
2  4   21  120

DF1:

print df1

       D   L
n2 n1       
1  2   5  10
   3   6  20
2  4   7  40