Pandas:如何解释多级列选择和值设置的.loc行为

2024-06-16 14:19:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用.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

这将给我一个数据框,看起来像:

p1

在这里,我尝试为两个带圆圈的单元格选择和设置值:

circle

我不知道是使用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

现在,数据帧如下所示:

new df

然后,如果我想用df2.loc['LA', 'Revenue']设置值,它将不起作用

df2.loc['LA', 'Revenue'] = 5

我得到了错误“TypeError:只有整数标量数组可以转换为标量索引”,而另一个方法工作正常

df2.loc['LA', ['Revenue']] = 2000
df2

set

因此,我真的很好奇在选择多级索引/列时括号in.loc的功能,以及为什么对多级列的某个级别进行排序会导致值设置失败

作为记录,我在处理原始数据时遇到了一个不同的错误:

dfn

WORK

dfn.loc['NOK', 'order'] = 5

这给了我“ValueError:包含多个元素的数组的真值不明确。请使用a.any()或a.all()


Tags: 数据namecityindexmy错误locla
1条回答
网友
1楼 · 发布于 2024-06-16 14:19:12
 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

相关问题 更多 >