我有以下数据框。
df
Name Jan Feb Mar
Description
New A 34 32 54
Old B 65 98 05
Retired C 96 26 43
Description是一个索引列
我试图给变量分配一个值,如下所示。
variable = df[(df['Description']=='Retired') & (df['Name']=='C')]["Jan"]
但我得到一个错误:
ValueError: setting an array element with a sequence.ValueError: setting an array element with a sequence.
有什么方法可以做到这一点吗?
使用 DataFrame.loc
与比较指数 - 输出是 Series
- 一个或多个值。
variable = df.loc[(df.index=='Retired') & (df['Name']=='C'), "Jan"]
print (variable)
Description
Retired 96
Name: Jan, dtype: int64
如果需要先选择,并且总是存在至少一个值,则使用。
print (variable.iat[0])
96
但如果可能没有匹配,那么返回的是空系列,不能像上面那样选择,那么就可以使用 next-iter
如果系列为空,可以设置默认值。
variable = df.loc[(df.index=='Retired') & (df['Name']=='another'), "Jan"]
print (variable)
Series([], Name: Jan, dtype: int64)
print (next(iter(variable), 'no match'))
no match
另一个更好的解决方案是添加 Name
指向 MultiIndex
然后选择 tuple
如果需要标量输出。
df = df.set_index('Name', append=True)
variable = df.loc[('Retired','C'), "Jan"]
print (variable)
96