2017-09-25 41 views
0

我想要做的就是使用映射函数将数据透视表绑定到另一个数据框。 A1:A4是表示不同位置的列。因此,数据透视表中的值代表A1或A3处的实例数量等。Python熊猫将多级列标题df映射到另一个df

我有一个数据框和一个数据透视表。数据帧(df1)如下所示:

SubscriberKey Inst A1 A2 A3 A4 
     'abc'  2  0 0  0 0 
     'bcd'  4  0 0  0 0 
     'cde'  1  0 0  0 0 
     'def'  0  0 0  0 0 
     'efg'  0  0 0  0 0 

我的数据透视表(pt1)看起来像这样。它也有一个多级列标题,因为它是一个数据透视表。为了澄清我的意思是多级列标题是单列标题输出('实例','A1')。反正下面是我的数据透视表的快照(PT1):

 Subscriber Key Instance Instance Instance Instance 
     Linkname  A1  A2  A3  A4 
     'abc'   2   0  2  0 
     'bcd'   4   1  1  2 
     'cde'   1   1  0  0 

我想以某种方式填充我DF的A1:基于什么是在枢轴A4列。 df拥有比枢轴表包含更多的订户键,所以行数不一样。

输出将如下所示:

SubscriberKey Inst A1 A2 A3 A4 
     'abc'  2  0 0 2 0 
     'bcd'  4  0 1 1 2 
     'cde'  1  1 0 0 0 
     'def'  0  0 0 0 0 
     'efg'  0  0 0 0 0 

任何帮助表示感谢,谢谢!我已经尝试过df1.update(pt1 [column]),它返回'Type Error:expected tuple,got str'

回答

1

更新应该可以工作。试试这个:

df1 = df1.set_index('SubscriberKey') 
df1 


Output:    
      Inst A1 A2 A3 A4 
SubscriberKey     
'abc'   1 0 0 0 0 
'bcd'   2 0 0 0 0 
'cde'   1 0 0 0 0 
'def'   3 0 0 0 0 
'efg'   0 0 0 0 0 

df2 = df2[1:] 
df2.columns = ["SubscriberKey","A1","A2","A3","A4"] 
df2 = df2.set_index('SubscriberKey') 



Output: 
       A1 A2 A3 A4 
SubscriberKey    
'abc'   1 0 2 0 
'bcd'   0 1 1 2 
'cde'   1 1 0 0 

然后做:

df1.update(df2) 
df1 

这给:

   Inst A1 A2 A3 A4 
SubscriberKey     
'abc'   1 1 0 2 0 
'bcd'   2 0 1 1 2 
'cde'   1 1 1 0 0 
'def'   3 0 0 0 0 
'efg'   0 0 0 0 0 
+0

嗨更新我的第二个数据框,以正确显示如何列显示 - 当我使用df2 = df2 [1:],它实际上削减我的第一行,而不是列标题 – user6749426

+0

它成功了!谢谢!! – user6749426

+0

完成并完成!再次感谢你 – user6749426

1
df[['SubscriberKey','Inst']].join(pt1.set_index('Linkname'), on='SubscriberKey') 

这工作,以及你处理多级索引之后。有很多方法可以解决这个问题。我通常只使用.reset_index()