Python 3.x python获取第一个元素包含字符串的列

Python 3.x python获取第一个元素包含字符串的列,python-3.x,pandas,Python 3.x,Pandas,所以我得到了这个数据帧: df = pd.DataFrame({'A': ['ex1|context1', 1, 'ex3|context3', 3], 'B': [5, 'ex2|context2', 6, 'data']}) 我想得到在第一个元素中有“|”的列,在我的示例中是A,因为ex1 | context1是第一个元素,并且包含“|”,如果数据中始终至少存在一个值: s = df.stack().reset_index(level=0, drop=True) out = s.str.

所以我得到了这个数据帧:

df = pd.DataFrame({'A': ['ex1|context1', 1, 'ex3|context3', 3], 'B': [5, 'ex2|context2', 6, 'data']})

我想得到在第一个元素中有
“|”
的列,在我的示例中是
A
,因为
ex1 | context1
是第一个元素,并且包含
“|”
,如果数据中始终至少存在一个
值:

s = df.stack().reset_index(level=0, drop=True) 
out = s.str.contains('|', na=False).idxmax()
print (out)
A
如果没有数据匹配,通用解决方案也可以工作:

df = pd.DataFrame({'A': ['ex1context1', 1, 'ex3ontext3', 3], 
                   'B': [5, 'ex2ontext2', 6, 'data']})
print (df)
             B           A
0  ex1context1           5
1            1  ex2ontext2
2   ex3ontext3           6
3            3        data

s = df.stack().reset_index(level=0, drop=True)

out = next(iter(s.index[s.str.contains('|', na=False, regex=False)]), 'no match')
print (out)
no match

这是只通过第一列进行搜索,还是得到第一行中包含该字符串的第一列?它通过堆栈进行重塑,因此按行进行搜索是我在
df=pd.DataFrame上测试的原因({'A':['ex1 | context1',1','ex3 | context3',3],'B':['ex4 | context1','ex2 | context2',6,'data']))
它的两个列都以包含“|”的字符串开头,它只给了我一个,但没关系,我只需要第一个包含它的列,好奇地问:)。@alex-对于一般解决方案来说更复杂。tnx对于解决方案,pandas是一种痛苦。。如果你在没有任何经验的情况下深入研究它:D