0

我是熊猫的新手,并试图学习如何使用它。我在尝试使用在我的数据上的 wes 视频和笔记本之一中看到的示例时遇到问题。我有一个如下所示的 csv 文件:

filePath,vp,score
E:\Audio\7168965711_5601_4.wav,Cust_9709495726,-2
E:\Audio\7168965711_5601_4.wav,Cust_9708568031,-80
E:\Audio\7168965711_5601_4.wav,Cust_9702445777,-2
E:\Audio\7168965711_5601_4.wav,Cust_7023544759,-35
E:\Audio\7168965711_5601_4.wav,Cust_9702229339,-77
E:\Audio\7168965711_5601_4.wav,Cust_9513243289,25
E:\Audio\7168965711_5601_4.wav,Cust_2102513187,18
E:\Audio\7168965711_5601_4.wav,Cust_6625625104,-56
E:\Audio\7168965711_5601_4.wav,Cust_6073165338,-40
E:\Audio\7168965711_5601_4.wav,Cust_5105831247,-30
E:\Audio\7168965711_5601_4.wav,Cust_9513082770,-55
E:\Audio\7168965711_5601_4.wav,Cust_5753907026,-79
E:\Audio\7168965711_5601_4.wav,Cust_7403410322,11
E:\Audio\7168965711_5601_4.wav,Cust_4062144116,-70

我将它加载到数据框并按“filePath”和“vp”分组,代码是:

res = df.groupby(['filePath','vp']).size()    
res.index

输出是:

[E:\Audio\7168965711_5601_4.wav                  Cust_2102513187,
Cust_4062144116,                                 Cust_5105831247,
Cust_5753907026,                                 Cust_6073165338,
Cust_6625625104,                                 Cust_7023544759,
Cust_7403410322,                                 Cust_9513082770,
Cust_9513243289,                                 Cust_9702229339,
Cust_9702445777,                                 Cust_9708568031,
Cust_9709495726]

现在我试图像字典一样接近索引,正如我在示例中看到的那样,但是当我这样做时

res['Cust_4062144116']

我收到一个错误:

KeyError: 'Cust_4062144116'

当我放置文件路径时,我确实成功地得到了一个结果,但是正如我在前面的例子中所理解和看到的,我也应该能够使用 vp 密钥,不是吗?

抱歉,如果它是微不足道的,我只是不明白为什么它在一个示例中有效,而在另一个示例中无效。

4

2 回答 2

1

罗格你不正确。可以“部分”索引 multiIndex 系列。我只是做错了。

索引第一级是文件名(例如上面的E:\Audio\7168965711_5601_4.wav),第二级是vp。意思是,对于每个文件名,我有多个 vps。现在,这是正确的:

res['E:\Audio\7168965711_5601_4.wav]

并将返回:Cust_2102513187 2 Cust_4062144116 8 ....

但尝试按内部索引(Cust_ 索引)进行索引将失败。

于 2013-07-25T16:36:53.480 回答
0

您按两列分组,因此得到一个 MultiIndex 作为回报。这意味着您还必须使用这些对列进行切片,而不是使用单个索引值。

.size()在 groupby 对象上将其转换为系列。如果你在 DataFrame 中强制它,你可以使用该.xs方法来分割单个级别:

res = pd.DataFrame(df.groupby(['filePath','vp']).size())
res.xs('Cust_4062144116', level=1)

这样可行。如果您想将其保留为一个系列,布尔索引可以提供帮助,例如:

res[res.index.get_level_values(1) == 'Cust_4062144116']

最后一个选项可读性较差,但有时也更灵活,您可以一次测试多个值,例如:

res[res.index.get_level_values(1).isin(['Cust_4062144116', 'Cust_6073165338'])]
于 2013-06-26T14:51:41.593 回答