Python 当我有一个多索引列时,如何使用.loc?

Python 当我有一个多索引列时,如何使用.loc?,python,pandas,multi-index,Python,Pandas,Multi Index,我写了一段简短的代码来说明什么让我困惑: import numpy as np import pandas as pd a = [0.2,0.4] f = np.linspace(0.0,4.0,5) mindex = pd.MultiIndex.from_product([a,f], names=['a', 'f']) df = pd.DataFrame(dtype=float, index=range(0,100), columns=mindex) 有关数据框的打印结构,请参见编辑。现

我写了一段简短的代码来说明什么让我困惑:

import numpy as np
import pandas as pd

a = [0.2,0.4]
f = np.linspace(0.0,4.0,5)

mindex = pd.MultiIndex.from_product([a,f], names=['a', 'f'])
df = pd.DataFrame(dtype=float, index=range(0,100), columns=mindex)
有关数据框的打印结构,请参见编辑。现在,我想知道如何专门使用
.loc
为特定元素赋值。显然,以下是:

print(df.loc[0, 0.2, 0.0])
给我一个错误:

pandas.core.indexing.IndexingError: Too many indexers
但我不明白为什么?以下两个语句按预期工作:

print(df.loc[0])
print(df.loc[0,0.2])
使用
打印(df.loc[0,0.2])
例如输出:

f
0.0   NaN
1.0   NaN
2.0   NaN
3.0   NaN
4.0   NaN
Name: 0, dtype: float64
但是如何得到最终的
f=0.0
值呢

另外,我的下一个想法是使用一个元组作为列索引,但是
print(df.loc[0,0.2,0.0]])
也不起作用


编辑:只是为了澄清我的数据框架的结构

print(df)
给出:

a  0.2                 0.4                
f  0.0 1.0 2.0 3.0 4.0 0.0 1.0 2.0 3.0 4.0
0  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
...
...

编辑2:仅在评论后更新,基本上有两个建议是使用
df.loc[0][0.2][0.0]
df[[(0.2,0.0)]].loc[0]
。然而,由于我需要它来为特定的元素赋值,熊猫似乎不鼓励这两个元素(参见)


事实上,
df.loc[0][0.2][0.0]=2
似乎有效,但
df[[(0.2,0.0)].loc[0]=2
无效(因为它返回的是切片的副本而不是视图)

df.loc[0][0.2][0.0]在您的情况下有效吗?但我无法使用它进行分配,因为它将返回副本切片和现在的视图,对吗?也就是说,
df[0][0.2][0.0]=…
不起作用。好的,没关系,我刚试过,它对作业有效。这让我困惑,我认为这样做是不鼓励的。它确实为我编辑了原始的df。pandas 0.18.1Hmm,这确实有效
df.ix[0,[(0.2,0.0)]
但在0.20.0中它将被弃用,因此我认为您需要
df.loc[0,(0.2,0)]
这对我来说确实有效对于多索引,使用元组定义所需的位置,如
df.loc[0,(0.2,0)]
。这是推荐的方法。