2013-10-30 92 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 
相关问题