2015-06-21 39 views
2

数据帧专栏中,我有两个dataframes:乘大熊猫具有恒定

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 " 

我想简单地乘以Percent列在数据帧df中使用常数值ActualCitations

我尝试以下:

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

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

但两者仅执行它的第一行,其余是烤饼,如下所示:

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中的每一行创建行0,并且从行1中的每一行创建行1,但是在第二数据集中没有行1,所以你从那里得到NaN。

因此,您需要有意识地破坏第二个数据框的数据框方面,以便熊猫将'常规'广播到所有行。一种方法是使用values,在这种情况下,它基本上只是从数据框中删除索引,以便它变成一个具有一个元素(实际上是标量,但在技术上包含在numpy数组中的数组)的numpy数组。 to_list()也将完成相同的事情。

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

df['Percent'] * allcitations['ActualCitations'].values 

0 1485.374682 
1  963.718402 
2 1250.421481 
3 1700.415667 
+1

此外,我发现,如果我在列中数据帧想要一个常量乘以它,我可以用'allcitations.at [0,“ActualCitations”]' – BKS

+0

是的,这是一个很好的解决方案了。任何将数据框对象中的“allcitations”减少为熊猫解释为常量或标量的东西都应该可以正常工作。 – JohnE