如何在Python中输出带有特定文本的单元格的位置列表



我正试图找到具有";Pi";。

我的数据帧如下。正如你所看到的;Pi";是格式为column,row0,21,11,3

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

因此,我想要的输出是[(0,2),(1,1),(1,3)]。我的代码如下。

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)

但是,我得到了输出[0, 1, 2, 3, 4]。请帮我找出错误。

(
df
.reset_index(drop=True)
.set_axis(range(df.shape[1]), axis=1)
.apply(lambda s: s[s.str.contains('Pi')].index.values)
.to_frame()
.apply(lambda s: [(s.name, i) for i in s.values[0]], axis=1)
.explode()
.tolist()
)

根据我的理解,你想过滤掉并找到包含PI的字符串,键字符串,并检查哪些索引有它。然后把它放进列表中?

一个简单的loc选择索引类将帮助您完成

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

如果您想将返回的对象堆叠在列表中,而不需要索引类型

[str(i) for i in pi_rows_index]

将返回通缉名单

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

最新更新