大佬教程收集整理的这篇文章主要介绍了Pandas:如何解释多级列选择和值设置中的这种 .loc 行为,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用 .loc 为多级列数据框的某些单元格选择和设置值。但是我对得到的结果和错误感到困惑。
例如
@H_403_4@@H_496_6@my_List = [['Chicago','A',112,8],['Philly',252,19],['LA',411,12],['Chicago','B',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
与后者相比,收益
@H_403_4@ Firm
Revenue A 12
B 12
name: LA,dtype: int64
任何一种方法都允许我设置值。但是如果我按照第 2 级对列顺序进行排序,则会出现错误。
@H_403_4@df2 = df1.sort_index(1,1)
df2
然后,如果我想用 df2.loc['LA','Revenue']
设置值,它将不起作用。
df2.loc['LA','Revenue'] = 5
我收到错误“TypeError: only Integer scalar arrays can be convert to a scalar index”,而另一种方法工作正常。
@H_403_4@df2.loc['LA',['Revenue']] = 2000
df2
所以我真的很好奇.loc中括号在选择多级索引/列时的作用以及为什么对多级列的一个级别进行排序会导致值设置失败。
作为记录,我在处理原始数据时遇到了不同的错误:
@H_403_4@dfn
@H_403_4@dfn.loc['NOK','order'] = 5
这给了我“ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()”
la A B for Revenue was 12 12. unstack remove the multiple key index. set_index to city and firm,use loc to replace your value,then unstack the dataframe for display
my_list = [['Chicago','A',112,8],['Philly',252,19],['LA',411,12],['Chicago','B',12]]
df1 = pd.DataFrame(columns=['City','Firm','employee','Revenue'],data=my_list)
df1 = df1.set_index(['City','Firm'])
df1.loc[('LA','B'),'Revenue']=14
df1.loc[('LA','A'),'Revenue']=13
df1 = df1.unstack()
print(df1)
output
employee Revenue
Firm A B A B
City
Chicago 112 112 8 8
LA 411 411 13 14
Philly 252 252 19 19
以上是大佬教程为你收集整理的Pandas:如何解释多级列选择和值设置中的这种 .loc 行为全部内容,希望文章能够帮你解决Pandas:如何解释多级列选择和值设置中的这种 .loc 行为所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。