【问题标题】:Get indeces of given rows present in a dataframe获取数据框中存在的给定行的索引
【发布时间】:2021-10-08 14:29:47
【问题描述】:

我有一个如下所示的数据框:

data = [[1, 10,100], [1.5, 15, 25], [7, 14, 70], [33,44,55]]
df = pd.DataFrame(data, columns = ['A', 'B','C'])

并且有这样的视觉表达

A    B    C
1    10   100
1.5  15   25
7    14   70
33   44   55

我还有其他数据,这是数据框中行的随机子集,所以像这样

set_of_rows = [[1,10,100], [33,44,55]]

我想在df 中获取指示set_of_rows 中每一行位置的索引。所以我需要一个函数来做这样的事情:

indeces = func(subset=set_of_rows, dataframe=df)
In [1]: print(indeces)
Out[1]: [0, 3]

什么功能可以做到这一点?天呐

【问题讨论】:

  • 您是否尝试查找值并返回索引?
  • @Luke 是的,像这样。正如我所写的,我试图找到许多行在数据框中的位置(以什么指数)
  • 看看this post
  • @SeaBean 谢谢,这有帮助!这与 IoaTzimas 的答案相似,所以我想我会使用他的建议

标签: python pandas dataframe indexing numpy-slicing


【解决方案1】:

尝试以下方法:

[i for i in df.index if df.loc[i].to_list() in set_of_rows]
#[0, 3]

如果你想要它作为一个函数:

def func(set_of_rows, df):
    return [i for i in df.index if df.loc[i].to_list() in set_of_rows]

【讨论】:

  • 谢谢!难道没有内在的熊猫功能吗?您的答案会起作用,但看起来它可能比专门为我的任务构建的 pandas 函数要慢。而且您的解决方案也不能很好地处理错误的情况,例如如果我在set_of_rows 中错误地连续出现[1, 10, abc] 之类的内容,您的解决方案将跳过我的错误。这很好,但如果它能给我NaN 或类似的东西会更好。顺便说一句,有人否决了你的答案,不是我
【解决方案2】:

你可以看看这个帖子; Python Pandas: Get index of rows which column matches certain value

据我所知,您的任务没有内在的 Panda 函数,因此迭代是完成它的唯一方法。如果您担心处理错误,您可以在循环中添加条件来解决这个问题。

for i in df.index:
    lst = df.loc[i].to_list()
    if lst in set_of_rows:
       return i
    else:
       return None

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    相关资源
    最近更新 更多