J.Guo
J.Guo

Reputation: 37

How to return column&row index of cell of certain value

index col1 col2 col3
0      0    1    0
1      1    0    1
2      1    1    0

I am just stuck at a task: to find locations(indices) of all cells that equals to 1. I was trying to use such a statement

column_result=[]
row_result=[]
for column in df:           
    column_result=column_result.append(df.index[df[i] != 0])
for row in df:
    row_result=row_result.append(df.index[df[i]!=0)

my logic is using loops to traverse the colomns and rows separately and concatenate them later however it returns'NoneType' object has no attribute 'append' would you please help me to debug and complete this task

Upvotes: 1

Views: 89

Answers (1)

jezrael
jezrael

Reputation: 863791

Use numpy.where for indices for index and columns and then select them for cols, idx lists:

i, c = np.where(df.ne(0))

cols = df.columns[c].tolist()
idx = df.index[i].tolist()

print (idx)
[0, 1, 1, 2, 2]
print (cols)
['col2', 'col1', 'col3', 'col1', 'col2']

Or use DataFrame.stack with filtering for final DataFrame:

s = df.stack()

df1 = s[s.ne(0)].rename_axis(['idx','cols']).index.to_frame(index=False)
print (df1)
   idx  cols
0    0  col2
1    1  col1
2    1  col3
3    2  col1
4    2  col2

Upvotes: 1

Related Questions