【发布时间】:2020-08-04 04:59:26
【问题描述】:
我正在寻求一些帮助来理解以下结果。为什么我得到 df.loc[1, 'c2'] 的 NaN?由于只有一个索引时我没有得到相同类型的错误,因此它必须与在计算中未指定多索引的第二级有关,但我无法找出确切的问题.为什么它只在我使用 .values 时才有效?
df = pd.DataFrame({'i': [1,1,2,2], 'i2':[1,2,1,2], 'a':[10,20,30,40], 'b':[100,100,300,400]})
df = df.set_index('i')
df.loc[1, 'c1'] = df.loc[1, 'a'] / df.loc[1, 'b'] #Works
df = df.reset_index()
df = df.set_index(['i', 'i2'])
df.loc[1, 'c2'] = df.loc[1, 'a'] / df.loc[1, 'b'] #Fails (NaN)
df.loc[1, 'c2'].index.equals(df.loc[1, 'a'].index) #True
df.loc[1, 'c2'].index.equals(df.loc[1, 'b'].index) #True
df.loc[1, 'c3'] = df.loc[1, 'a'].values / df.loc[1, 'b'].values #Works
df.loc[1, 'c4'] = (df.loc[1, 'a'] / df.loc[1, 'b']).values #Works
【问题讨论】:
-
这能回答你的问题吗? Select rows in pandas MultiIndex DataFrame
-
我不这么认为,除非我只是错过了关键细节。看看那里,我的做法似乎应该可行,尽管答案都是关于选择而不是分配我的问题所在。
-
我的错误,我更理解你的问题。因为它适用于
.values我会说问题是索引对齐,即使您检查索引是否相等。例如,如果您为第二级选择 slice(None),它似乎可以工作df.loc[(1,slice(None)), 'c5'] = df.loc[(1,slice(None)), 'a'] / df.loc[(1,slice(None)), 'b']
标签: python pandas dataframe indexing nan