2

Given a pandas dataframe, is there a way to get the indices of rows where a column has particular values?

Consider the following toy example:

CSV (save as test1.csv)

id,val1,val2
1,20,A
1,19,A
1,23,B
2,10,B
2,10,A
2,14,A

What I currently have is this:

import pandas as pd

df = pd.read_csv('test1.csv')
print(df)

print(df[df['id']==1].index.to_list())
print(df[df['id']==2].index.to_list())
   id  val1 val2
0   1    20    A
1   1    19    A
2   1    23    B
3   2    10    B
4   2    10    A
5   2    14    A
[0, 1, 2]
[3, 4, 5]

Is there an option/functionality that can give me something like the following? (I want to be able to do this for large value lists, fast!)

print(df['id'].someFn([1,2]))

Desired output:

{1:[0,1,2], 2:[3,4,5]}

1 Answer 1

3

Try groupby:

{k: list(d.index) for k, d in df.groupby('id')}

Output:

{1: [0, 1, 2], 2: [3, 4, 5]}
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.