我有两个数据帧:
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
答案 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
 代码>