将pandas dataframe列与常量相乘

时间:2015-06-21 11:37:41

标签: python-2.7 pandas dataframe

我有两个数据帧:

df:

  Conference  Year  SampleCitations   Percent  
0        CIKM  1995              373  0.027153     
1        CIKM  1996              242  0.017617        
2        CIKM  1997              314  0.022858        
3        CIKM  1998              427  0.031084        

另一个数据框,它返回引用的总数:

allcitations= pd.read_sql("Select Sum(Citations) as ActualCitations from publications "

我想简单地将数据框df中的Percent列与常量值ActualCitations相乘。

我尝试了以下内容:

df['ActualCitations']=df['Percent'].multiply(allcitations['ActualCitations'])

df['ActualCitations']=df['Percent']* allcitations['ActualCitations']

但两者都只在第一行执行,剩下的就是Naan,如下所示:

   Conference  Year  SampleCitations   Percent  ActualCitations
0        CIKM  1995              373  0.027153      1485.374682
1        CIKM  1996              242  0.017617              NaN
2        CIKM  1997              314  0.022858              NaN
3        CIKM  1998              427  0.031084              NaN

1 个答案:

答案 0 :(得分:1)

这种情况下的问题是熊猫的自动对齐(通常是一件好事)。因为你的'常数'实际上是在数据帧中,所以pandas将尝试做的是从每个行0创建行0,然后从每个行1创建行1,但是在第二个数据集中没有行1,所以你从那里得到NaN。





所以你需要做的是故意破坏第二个数据帧的数据帧方面,这样pandas就会将常量“广播”到所有行。一种方法是使用 values ,在这种情况下,它基本上只是从数据帧中删除索引,以便它变成一个带有一个元素的numpy数组(实际上是一个标量,但在技术上包含在一个numpy数组中) )。 to_list()也会完成同样的事情。




  allcitations = pd.DataFrame({'ActualCitations':[54703.888410120424]} )

 df ['Percent'] * allcitations ['ActualCitations']。值

 0 1485.374682
 1 963.718402
 2 1250.421481
 3 1700.415667