NaN与Multindex分配一起出现在熊猫中

时间:2019-04-17 16:02:59

标签: python pandas

我正在解决一个问题,即我试图逐片构建一个多阵列,但是结果一直是NaN。这是一个最小的工作示例:

midx = pd.MultiIndex(levels=[['zero', 'one'], ['x', 'y']], codes=[[1, 1, 0, 0], [1, 0, 1, 0]])
df = pd.DataFrame(0, index=midx, columns=['A','B'])    #empty array
df1 = pd.DataFrame(np.random.randn(2, 2))                   #the array I want my slice to equal

df.loc['one']     # good so far
df.loc['one']=df1 # ok .....
df.loc['one']     # all NaNs

####### Output ########
>>> df
        A  B
one  y  0  0
     x  0  0
zero y  0  0
     x  0  0
>>> df.loc['one']
   A  B
y  0  0
x  0  0
>>> df.loc['one']=df1
>>> df.loc['one']
    A   B
y NaN NaN
x NaN NaN

这是为什么,如何解决?

1 个答案:

答案 0 :(得分:2)

df1分配给df.loc['one']时,Pandas尝试对齐索引值...但没有对齐。请改用values的{​​{1}}属性

df1

嗯...即使他们排队​​了,也似乎没用。我的建议确实适用于您的示例,但是仍然存在。

假设df.loc['one'] = df1.values 被定义为:

df1

这将提供更多确保值正确排列的保证,但有点让我失望...

df1 = pd.DataFrame(np.random.randn(2, 2), index=['x', 'y'], columns=['A', 'B']) 

另一种将必要级别添加到df.loc['one'] = df1.reindex_like(df.loc['one']).values

的黑客
df1