0

我想使图形的以下表示(边从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
4

2 回答 2

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
于 2013-07-08T07:58:36.670 回答
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
于 2013-07-08T10:35:46.620 回答