【问题标题】:How to get the integer positions of the True entries in a pandas indexer如何在熊猫索引器中获取 True 条目的整数位置
【发布时间】: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]

标签: python pandas numpy


【解决方案1】:

你可以使用:

np.flatnonzero(df2['label'])

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)
np.flatnonzero(df2['label'])

Out[1]: array([2, 4], dtype=int64)

这使它成为一个 np.array。要制作列表,请使用:

[*np.flatnonzero(df2['label'])]
Out[2]: [2, 4]

【讨论】:

    猜你喜欢
    • 2021-09-15
    • 2021-12-28
    • 2022-08-19
    • 2020-02-04
    • 2021-09-18
    • 2018-05-12
    • 2017-12-23
    • 1970-01-01
    • 2022-06-21
    相关资源
    最近更新 更多