2013-11-24 75 views
1

我有一個超級奇怪的問題,我花了最後一個小時試圖解決,但沒有成功。這更加奇怪,因爲我無法在小範圍內複製它。我有一個大的DataFrame(150,000條目)。我拿出它的一個子集並做了一些操作。該子集被保存爲不同的變量x。分配一列到大熊貓數據框之間的另一列(如矢量到矢量分配)

x小於df,但其指數與df的範圍相同。現在我想爲x回數據框在同一列替換值:

rep_Callers['true_vpID'] = x.true_vpID 

這將插入x中所有的不同的值在DF正確的地方,但不是保持df.true_vpID值不在x中,它是用NaN填充它們。於是,我嘗試了不同的方法:

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

但不是在DF在正確的地方填充的x值,則df.true_vpID被充滿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

嘗試使用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