web-dev-qa-db-ja.com

Pandas DataFrame行の条件を満たすインデックスの整数インデックスを取得しますか?

次のDataFrameがあります。

   a  b  c
b
2  1  2  3
5  4  5  6

ご覧のとおり、列bがインデックスとして使用されます。 ('b' == 5)(この場合は1)を満たす行の序数を取得します。

テストされる列は、インデックス列(この場合はbのように)または通常の列のいずれかです。 ('c' == 6)を満たす行のインデックスを見つけたい場合があります。

32
Dun Peal

次のように np.where を使用できます。

import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(1,7).reshape(2,3),
                  columns = list('abc'), 
                  index=pd.Series([2,5], name='b'))
print(df)
#    a  b  c
# b         
# 2  1  2  3
# 5  4  5  6
print(np.where(df.index==5)[0])
# [1]
print(np.where(df['c']==6)[0])
# [1]

列に特定のインデックスまたは値を持つ行が複数存在する可能性があるため、返される値は配列です。

33
unutbu

代わりに Index.get_loc を使用してください。

@unutbuのセットアップコードを再利用すると、同じ結果が得られます。

>>> import pandas as pd
>>> import numpy as np


>>> df = pd.DataFrame(np.arange(1,7).reshape(2,3),
                  columns = list('abc'),
                  index=pd.Series([2,5], name='b'))
>>> df
   a  b  c
b
2  1  2  3
5  4  5  6
>>> df.index.get_loc(5)
1
34
hlin117

Index.get_loc および一般条件の場合:

>>> import pandas as pd
>>> import numpy as np


>>> df = pd.DataFrame(np.arange(1,7).reshape(2,3),
                  columns = list('abc'),
                  index=pd.Series([2,5], name='b'))
>>> df
   a  b  c
b
2  1  2  3
5  4  5  6
>>> df.index.get_loc(df.index[df['b'] == 5][0])
1
2
Gabriele Picco