gpt4 book ai didi

python - NaN 出现在 Pandas 中的多索引赋值

转载 作者:太空宇宙 更新时间:2023-11-04 02:00:55 25 4
gpt4 key购买 nike

我正在解决一个问题,我试图逐个切片构建一个多数组,但结果总是得到 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

这是为什么,我该如何解决?

最佳答案

当将 df1 分配给 df.loc['one'] 时,Pandas 会尝试对齐索引值……但它们不会。使用 df1values 属性代替

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

的 hack
df.update(pd.concat({'one': df1}))

关于python - NaN 出现在 Pandas 中的多索引赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55731772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com