我正在Python中使用Pandas并遇到麻烦。我有一个带有索引和2列的数据框:“ VIFFactor”和“ features”。
我试图从我的数据框中返回在“ VIFFactor”中具有最大值的“功能”记录,但该数字超过5。
这是我的代码:
我试图用max替换idsmax并得到“无法将dtyped [bool]数组与类型为[bool]的标量进行比较”。
vif3 = vif_test.loc[(vif_test['VIFFactor'] >= 5) & (vif_test['VIFFactor'].idxmax()), 'features']
因此,例如,从下面开始,我想返回HadCampaign,因为它是最高记录且超过5条,但我目前什么也没得到:
VIFFactor features
2 12.028754355028974 HadCampaign
22 11.98926492333954 DiscountedPrice
29 5.460195615389739 RatingsReceivedRank
30 4.59851607313422 SortOrder
19 3.0681452496804833 PreferredPartnerBadge
9 3.0554578279939815 PerkCustomerDropService
28 2.735597253984768 RatingsReceived
26 2.263922204962396 PriceRank
答案 0 :(得分:0)
这不起作用,您应该查看max
,您的第一个条件通过bool并且长度为len(df)
,但是idxmax
仅返回index
max
值是一个值,因此,如果需要对数据帧进行切片,则需要至少传递两个长度相同的条件
vif3 = vif_test.loc[(vif_test['VIFFactor'] >= 5) & (vif_test['VIFFactor'].max() == vif_test['VIFFactor']), 'features']
答案 1 :(得分:0)
分为两行可能更清楚:
vif_test = vif_test[vif_test.VIFFactor > 5].set_index('VIFFactor')
vif3 = vif_test.loc[max(vif_test.index), 'feature']
注意:max()通常可能比index.max()更快。在小型数据框上进行测试:
%timeit d.index.max()
34.3 µs ± 447 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
%timeit max(d.index)
9.43 µs ± 143 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)