Home > Blockchain >  How can I output the list of positions of the cells with specific text in Python?
How can I output the list of positions of the cells with specific text in Python?

Time:10-21

I am trying to find the postions of the cells which have "Pi".

My dataframe is as follows. As you can see, the cells with "Pi" are in 0,2, 1,1, 1,3 in format column,row.

   Pi Column_B
0   F   Kitten
1   L    Pippy
2  Pi     Lamb
3   K    Pikjh
4   K     Momo

Therefore, the output that I want is [(0,2),(1,1),(1,3)]. My code is as follows.

import pandas as pd
# My dataframe
data = {'Column_A':['F','L','K','K','K'],
      'Column_B':['Kitten','Pippy','Lamb','Pikjh','Momo']}
df = pd.DataFrame(data)

# Search for the cell which includes "Pi"
search_for_Pi = df.apply(lambda row: row.astype(str).str.contains('Pi').any(), axis=1)
Found_Pi_Position = pd.DataFrame(search_for_Pi)

# Print the position of the cells which include "Pi"
Print_Pi_Position = list(Found_Pi_Position[Found_Pi_Position == True].index)
print(Print_Pi_Position)

However, I got the output [0, 1, 2, 3, 4]. Please help me finding the error.

CodePudding user response:

From what I could understand you want to filter out and located the strings that contain the PI, key string and check out what indexes have it. And put it into a list?

For that a simple loc And a index class selections will help you out

pi_rows = df.loc[df.Pi.str.contains('Pi')]

pi_rows_index =  df.loc[df.Column_b.str.contains('Pi') | df.Pi.str.contains('Pi')].index

If you want to stack the returned object in a list, without having the index type

[str(i) for i in pi_rows_index]

Will return the wanted list

CodePudding user response:

list1=[]
def function1(s:pd.Series):
    for k,v in s.to_dict().items():
        if 'Pi' in v:
            list1.append((s.name,k))

df1.T.reset_index(drop=True).T.apply(function1)
list1
  • Related