无法重塑(枢轴)熊猫 DF

Luc*_*tto 2 python pivot reshape pandas

所以我有这个 DF:

In [130]: dfAbr
Out[130]: 
           ip ospfArea router_name
0     1.1.1.1  0.0.0.2   Router1-1
1     1.1.1.2  0.0.0.2   Router1-2
140   5.5.5.1  0.0.0.5   Router5-1
141   5.5.5.2  0.0.0.5   Router5-2
Run Code Online (Sandbox Code Playgroud)

我想将其重塑为 2 行数据框,例如:

在此处输入图片说明

我一直在玩stack/unstackpivot 功能,但不能走那么远。

例如,dfAbr1 = pd.DataFrame(dfAbr.set_index('ospfArea').stack()).reset_index()重命名列名会产生以下结果:

In [151]: dfAbr1
Out[151]: 
  ospfArea       level1     level2
0  0.0.0.2           ip    1.1.1.1
1  0.0.0.2  router_name  Router1-1
2  0.0.0.2           ip    1.1.1.2
3  0.0.0.2  router_name  Router1-2
4  0.0.0.5           ip    5.5.5.1
5  0.0.0.5  router_name  Router5-1
6  0.0.0.5           ip    5.5.5.2
7  0.0.0.5  router_name  Router5-2
Run Code Online (Sandbox Code Playgroud)

从那里开始,我想要pivot它,就像这样:dfAbr1.pivot(index='ospfArea', columns='level1',values='level2'),但我无法做到Index contains duplicate entries, cannot reshape。我相信这是因为在level1我下面有重复的值......

还有其他方法吗?

谢谢!

jez*_*ael 8

创建MultiIndexbyDataFrame.set_index与计数器 column by GroupBy.cumcount,reshape byDataFrame.unstack和 flatten Multiindexby mapwith format

df = df.set_index(['ospfArea', df.groupby('ospfArea').cumcount().add(1)]).unstack()
df.columns = df.columns.map('{0[0]}{0[1]}'.format)
print (df)
              ip1      ip2 router_name1 router_name2
ospfArea                                            
0.0.0.2   1.1.1.1  1.1.1.2    Router1-1    Router1-2
0.0.0.5   5.5.5.1  5.5.5.2    Router5-1    Router5-2
Run Code Online (Sandbox Code Playgroud)