python - Pandas:如何在多级列选择和值设置中解释这种 .loc 行为
问题描述
我正在尝试使用.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
所以我真的很好奇在选择多级索引/列时.loc中括号的功能以及为什么对多级列的级别进行排序会导致值设置失败。
作为记录,我在处理原始数据时遇到了另一个错误:
dfn
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', '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'])
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
推荐阅读
- python - 用线条制作可见/不可见的注释 (mathplotlib)
- xsd - 是否可以为 xsi:schemaLocation 创建模式?
- pine-script - 如何一键启用或禁用以下指标
- sql-server - 我不明白为什么日期时间字段上的查询过滤在 sql server 2016 上不起作用
- roblox - BodyGyro如何阻止零件旋转?
- android - 如何从firebase存储中获取uri并将其保存在android(java)中的cloud firestore
- oracle - 如何从 ODBC DSN 中查找主机?
- c# - 列表框项目移动正在移动错误的项目
- node.js - 不变违规:“main”尚未注册。在以下情况下可能会发生这种情况: * Metro(本地开发服务器)从错误的文件夹运行
- flutter - Flutter showModalBottomSheet 不允许透明背景容器