gpt4 book ai didi

python - Pandas:使用 [column name][row_number] 选择数组的值仅适用于 multiindex

转载 作者:行者123 更新时间:2023-11-28 18:10:16 24 4
gpt4 key购买 nike

我尝试使用 Pandas 借助数据透视表分析数据。

对于多索引,一切正常。

我有这个数据透视表:

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

现在我可以用

选择“count”列第二行的值
>>>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

如果您能向我解释这种意外(至少对我而言)行为的原因,我将非常高兴。谢谢!

最佳答案

不鼓励文档

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

备选方案

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

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

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

此语法适用于您的两个示例。

关于python - Pandas:使用 [column name][row_number] 选择数组的值仅适用于 multiindex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51124676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com