【发布时间】:2020-10-15 20:14:36
【问题描述】:
我想获取 pandas 系列中行的整数位置,其中该系列包含特定值,或者获取布尔索引器中的位置,其中值为 True。
如果我有以下数据框,我想获取label 列中True 值的整数位置:
import pandas as pd
data=dict()
data["col_0"]=[-0.2518508748588564, -0.6339192005025384, -0.6938892242609978, 2.4470042529183402, 0.8977665869071174]
data["label"]=[False, False, True, False, True]
df2= pd.DataFrame(data)
我当然可以像下面那样做,但这对我来说似乎很尴尬,我想知道是否有更清洁的方法来做到这一点(尤其是没有 reset_index,但无论索引标签是什么,该解决方案都应该有效在原始数据框中使用):
ser= df2['label']
new_ser= ser.reset_index(drop=True)
new_ser.index[new_ser].to_list()
结果当然是[2, 4]。
【问题讨论】:
-
这对你有用吗?如果有帮助,请投票并接受作为解决方案。谢谢!
-
感谢您的回答,但不是我想要的。它返回我猜的索引,而不是整数位置。对于使用索引,我已经有了一个解决方案,如您在上面看到的。
-
没问题。这次我做了一些研究,因为几周前我有过类似的调查。我认为这是解决这个问题的最佳选择。如果
numpy有 3 种不同的方法可以做到这一点,我不会感到惊讶……有这么多numpy方法。学的太多了。 -
我想要整数位置的原因是,如果您将数据框用于机器学习并且必须将其转换为 numpy 对象或特定于模型的 darta 对象,则不能使用索引值。
-
我刚刚意识到我的部分答案以某种方式被删除了,所以我已经更新了。您还可以使用:
[*np.flatnonzero(df2['label'])]返回列表。您可能已经知道如何将 numpy 数组发送到列表,但为了完成我已经更新。祝你有美好的一天。Out[2]: [2, 4]