Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
173 views
in Technique[技术] by (71.8m points)

Python - Pandas: get row indices for a particular value in a column

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]}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Try groupby:

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

Output:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...