为了账号安全,请及时绑定邮箱和手机立即绑定

熊猫:使用[列名] [行号]选择数组的值仅适用于multiindex

熊猫:使用[列名] [行号]选择数组的值仅适用于multiindex

婷婷同学_ 2021-04-08 05:25:52
我尝试使用Pandas在数据透视表的帮助下分析数据。对于多索引,一切正常。我有这个数据透视表:>>>print(pivtab)           count  winpp   ps              8000 8200      4    28100 8200      2    1     8300      3    1现在,我可以选择“ count”列中第二行的值,例如>>>print(pivtab["count"][1])2仅使用单个索引数据透视表时,将出现意外行为。数据透视表如下所示:      count  winpp              8000      4    28100      5    2 现在,当我尝试使用相同的方式时,print(pivtab["count"][1]) 我得到了KeyError: 1。似乎Python现在不接受行号,而是行名(= index)。和>>>print(pivtab["count“][8100])5一切正常。完整的代码如下所示:import pandas as pdcolumns = ["count","game_Id","season","win","pp","ps"]matrix = pd.DataFrame(columns=columns)# Create a test matrixfor i in range(1,10):    win = 0    if int(i/2) == i/2:        win = 1    pprim = 8000    if i > 4:        pprim = 8100    psub = 8200    if i > 6:        psub = 8300    new_row = pd.DataFrame([[1, i, 11, win, pprim, psub]], columns=columns)    matrix = matrix.append(new_row,ignore_index=True)print(matrix)pivtab = pd.pivot_table(matrix, index=["pp","ps"], values=["count","win"], aggfunc="sum")print("\n", pivtab)print(pivtab["count"][1])完全感到困惑的是,我尝试了另一个测试矩阵...在这里一切正常!import pandas as pdmatrix = pd.DataFrame({"A":["hey","hey","boo","boo"], "B":[1,2,3,2], "valueA":[123,441,190,123], "valueB":[5,5,6,6]})piv_matrix = pd.pivot_table(matrix, index=["A"], values=["valueA","valueB"], aggfunc="sum")print(piv_matrix)print("\nValue:", piv_matrix["valueA"][1])结果:     valueA  valueBA                  boo     313      12hey     564      10Value: 564如果您能向我解释这种意外行为(至少对我而言)的原因,我将非常高兴。谢谢!
查看完整描述

1 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

不鼓励使用文档


该文档不建议使用链式索引。df[label_1][label_2]不应使用语法。


备择方案


大多数解决方案涉及loc/iloc用于标签/基于位置的切片或at/iat用于访问标量。


在示例中,您将混合基于标签的索引器和基于位置的索引器。相反,您可以选择一个序列并使用iat或iloc:


piv_matrix['valueA'].iat[1]

piv_matrix['valueA'].iloc[1]

此语法将对您的两个示例均适用。


查看完整回答
反对 回复 2021-04-20
  • 1 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信