将一列分配给pandas DataFrames之间的另一列(如向量到向量赋值)

时间:2013-11-24 23:12:08

标签: pandas

我有一个超级奇怪的问题,我花了最后一小时试图解决,但没有成功。更奇怪的是因为我无法在小范围内复制它。 我有一个大型DataFrame(150,000个条目)。我拿出了它的一个子集并进行了一些操作。子集保存为不同的变量x。

x小于df,但其索引与df的范围相同。我现在正尝试将x分配回DataFrame,替换同一列中的值:

rep_Callers['true_vpID'] = x.true_vpID

这会将x中的所有不同值插入到df中的正确位置,但不是保留不在x中的df.true_vpID值,而是用NaN填充它们。所以我尝试了另一种方法:

df.ix[x.index,'true_vpID'] = x.true_vpID

但是df.true_vpID不是在df中的正确位置填充x值,而是填充x的第一个值,只有它!我多次更改了x的第一个值,以确保确实发生了这种情况,事实确实如此。我试图小规模复制它,但它不起作用:

df = DataFrame({'a':ones(5),'b':range(5)})
     a   b 
0    1   0
1    1   1
2    1   2
3    1   3
4    1   4 

z =Series([random() for i in range(5)],index = range(5))
0    0.812561
1    0.862109
2    0.031268
3    0.575634
4    0.760752

df.ix[z.index[[1,3]],'b'] = z[[1,3]]
     a    b
0    1   0.000000    
1    1   0.812561
2    1   2.000000
3    1   0.575634
4    1   4.000000
5    1   5.000000

我真的尝试过这一切,需要一些新的建议......

1 个答案:

答案 0 :(得分:1)

尝试使用df.update(updated_df_or_series)

同样使用一个简单示例,您可以通过执行索引查询并修改生成的对象来修改DataFrame。

df_1
   a  b
0  1  0
1  1  1
2  1  2
3  1  3
4  1  4

df_2 = df_1.ix[3:5]
df_2.b = df_2.b + 2
df_2
   a   b
3  1   5
4  1   6   

df_1
   a  b
0  1  0
1  1  1
2  1  2
3  1  5
4  1  6