我试图使用.loc为多级列数据帧的某些单元格选择和设置值。但是我被我得到的结果和错误弄糊涂了
比如说,
my_list = [['Chicago', 'A', 112, 8],
['Philly', 'A', 252, 19],
['LA', 'A', 411, 12],
['Chicago', 'B', 112, 8],
['Philly', 'B', 252, 19],
['LA', 'B', 411, 12]]
df1 = pd.DataFrame(columns=['City', 'Firm', 'Employee', 'Revenue'],
data=my_list)
df1 = df1.set_index(['City', 'Firm']).unstack()
df1
这将给我一个数据框,看起来像:
在这里,我尝试为两个带圆圈的单元格选择和设置值:
我不知道是使用df1.loc['LA', 'Revenue']
还是df1.loc['LA', ['Revenue']]
。前者给了我结果
Firm
A 12
B 12
Name: LA, dtype: int64
与后者相比,后者
Firm
Revenue A 12
B 12
Name: LA, dtype: int64
任何一种方法都允许我设置值。但是如果我按第二级对列顺序排序,就会出现错误
df2 = df1.sort_index(1, 1)
df2
现在,数据帧如下所示:
然后,如果我想用df2.loc['LA', 'Revenue']
设置值,它将不起作用
df2.loc['LA', 'Revenue'] = 5
我得到了错误“TypeError:只有整数标量数组可以转换为标量索引”,而另一个方法工作正常
df2.loc['LA', ['Revenue']] = 2000
df2
因此,我真的很好奇在选择多级索引/列时括号in.loc的功能,以及为什么对多级列的某个级别进行排序会导致值设置失败
作为记录,我在处理原始数据时遇到了一个不同的错误:
dfn
dfn.loc['NOK', 'order'] = 5
这给了我“ValueError:包含多个元素的数组的真值不明确。请使用a.any()或a.all()
相关问题 更多 >
编程相关推荐