我想对图形进行以下表示(边缘从n1
到n2
)对称,这意味着我想复制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
答案 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