Pandas通过数据框架的两列过滤器为变量赋值。

问题描述 投票:0回答:1

我有以下数据框。

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.

有什么方法可以做到这一点吗?

python pandas dataframe
1个回答
2
投票

使用 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
© www.soinside.com 2019 - 2024. All rights reserved.