【问题标题】:Find integer row-index from pandas index从熊猫索引中查找整数行索引
【发布时间】:2017-02-21 17:53:28
【问题描述】:

以下代码查找 df['A'] == 1 的索引

import pandas as pd
import numpy as np
import random

index = range(10)
random.shuffle(index)
df = pd.DataFrame(np.zeros((10,1)).astype(int), columns = ['A'], index = index)

df.A.iloc[3:6] = 1
df.A.iloc[6:] = 2

print df

print df.loc[df['A'] == 1].index.tolist()

它正确返回熊猫索引。如何使用 pandas API 获取整数索引 ([3,4,5])?

   A
8  0
4  0
6  0
3  1
7  1
1  1
5  2
0  2
2  2
9  2
[3, 7, 1]

【问题讨论】:

  • 这些被称为'row-indices

标签: python pandas dataframe row indices


【解决方案1】:

怎么样?

In [12]: df.index[df.A == 1]
Out[12]: Int64Index([3, 7, 1], dtype='int64')

或(取决于您的目标):

In [15]: df.reset_index().index[df.A == 1]
Out[15]: Int64Index([3, 4, 5], dtype='int64')

演示:

In [11]: df
Out[11]:
   A
8  0
4  0
6  0
3  1
7  1
1  1
5  2
0  2
2  2
9  2

In [12]: df.index[df.A == 1]
Out[12]: Int64Index([3, 7, 1], dtype='int64')

In [15]: df.reset_index().index[df.A == 1]
Out[15]: Int64Index([3, 4, 5], dtype='int64')

【讨论】:

    【解决方案2】:

    这是一种方法:

    df.reset_index().index[df.A == 1].tolist()
    

    这将使用[0, 1, 2, ...] 重新索引数据帧,然后根据布尔掩码df.A == 1 提取整数索引值。


    编辑感谢@Max index[df.A == 1] 的想法。

    【讨论】:

      【解决方案3】:

      不需要 numpy,你是对的。只是带有 listcomp 的纯 python:

      只要找到值为1的索引

      print([i for i,x in enumerate(df['A'].values) if x == 1])
      

      【讨论】:

      • 我正在寻找一种在 pandas 中执行此操作的方法。这不应该在 pandas 中实现吗?
      • 我不知道。您的第一个问题提到“没有 numpy”,而不是“与 pandas”。我只是提出了一个仅限 python 的解决方案。
      • 我的错,我一开始表达得不好哈哈
      • 没问题。现在有 3 个有效答案各有特点:)
      猜你喜欢
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      • 2019-01-19
      • 2022-07-10
      • 2016-06-13
      • 2020-02-17
      相关资源
      最近更新 更多