Pandas:用[columnname][rownumber]选择数组的值只适用于多索引

2024-06-16 11:50:35 发布

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

我尝试使用Pandas在pivot表的帮助下分析数据。你知道吗

对于多索引,一切正常。你知道吗

我有一张透视表:

>>>print(pivtab)
           count  win
pp   ps              
8000 8200      4    2
8100 8200      2    1
     8300      3    1

现在我可以选择“count”列中第2行的值

>>>print(pivtab["count"][1])
2

当仅使用单个索引透视表时,会出现意外行为。透视表如下所示:

      count  win
pp              
8000      4    2
8100      5    2 

现在当我尝试用同样的方法来处理print(pivtab["count"][1]) 我得到一个KeyError: 1。似乎Python现在不接受行号,而是接受行名(=索引)。与

>>>print(pivtab["count“][8100])
5

一切正常。你知道吗

完整的代码如下所示:

import pandas as pd
columns = ["count","game_Id","season","win","pp","ps"]
matrix = pd.DataFrame(columns=columns)
# Create a test matrix
for 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 pd
matrix = 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  valueB
A                  
boo     313      12
hey     564      10

Value: 564

如果你能向我解释一下这种意外(至少对我来说)行为的原因,我会很高兴的。谢谢!你知道吗


Tags: columnsdataframeifcountwinmatrixppps
1条回答
网友
1楼 · 发布于 2024-06-16 11:50:35

不鼓励使用文档

文档discourages链接索引。不应使用语法df[label_1][label_2]。你知道吗

备选方案

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

在您的示例中,混合了基于标签和基于位置的索引器。相反,您可以选择一个系列并使用iatiloc

piv_matrix['valueA'].iat[1]
piv_matrix['valueA'].iloc[1]

这个语法对两个例子都适用。你知道吗

相关问题 更多 >