2013-10-30 94 views
2

對不起,如果這是一個簡單的問題,我試圖尋找一個解決方案,但找不到任何東西。Python Pandas索引

我的代碼是這樣的:

  • 給出ZIP1,創建一個索引來選擇其中的一些計算尚未完成(666)

    I = (df['zip1'] == zip1) & (df['Distances'] == 666) 
    
  • 進行觀測(其他郵編)一些計算

    distances = calc(zip1,df['zip2'][I]) 
    

到目前爲止,我已經檢查了距離變量,正確的值,正確大小的數組。

  • 把距離變量在正確的地方

    df['Distances'][I] = distances 
    

但最後一部分更新所有的df['Distances']變量廢話值與df['zip1']=zip1,而不是由I選擇那些所有觀測。

我檢查了df['Distances'][I] = distances命令之前的布爾數組I,它看起來很好。任何想法將不勝感激。

+0

您需要使用'.loc'或'.ix'而不是鏈接的配置參見[這裏](HTTP://pandas.pydata .org/pandas-docs/dev/indexing.html#indexing-view-versus-copy)also [related](http://stackoverflow.com/questions/11869910/pandas-filter-rows-of-dataframe-with-運算符鏈),所以正確的用法是'df.loc [l,'距離'] =距離' – EdChum

+0

你有工作示例來測試嗎? –

+0

EdChum的建議工作。有道理,從來不知道這個觀點vs之前複製的東西。謝謝。 – AsianYayaToure

回答

0

你正在嘗試的是所謂的鏈式賦值,並不按照你認爲的方式工作,因爲它返回一個副本而不是視圖,因此你看到的錯誤。

有一個關於它here及相關issuesthisthis更多信息。

所以,你應該要麼使用.loc.ix像這樣:

df.loc[I,'Distances']=distances 
相關問題