遍历数据框的所有列以查找字符串列表
Iterating over all columns of dataframe to find list of strings
假设我有以下 df
:
df = pd.DataFrame({
'col1':['x1','x2','x3'],
'col2':['y1','y2','y3'],
'col3':['z1','z2','z3'],
'col4':['a1','b2','c3']
})
和元素列表:
l = ['x1','x2','y3']
我想在我的 df
的所有列中搜索 l
的元素,因为它来自我的列表 x1
并且 x2
出现在 [=19] =] 并且 y3
在 col2
中,所以我做了:
df.loc[df['col1'].apply(lambda x: True if any(i in x for i in l) else False)|
df['col2'].apply(lambda x: True if any(i in x for i in l) else False)]
这给了我
col1 col2 col3 col4
0 x1 y1 z1 a1
1 x2 y2 z2 b2
2 x3 y3 z3 c3
根据需要,但上述方法需要我为每一列创建一个 |
运算符。所以我想知道如何在不对每一列使用 |
的情况下有效地对所有列进行迭代?
很多,很多更有效的方法是使用 numpy 广播。
row_mask = (df.to_numpy() == l[:, None, None]).sum(axis=0).any(axis=1)
filtered = df[row_mask]
输出:
>>> filtered
col1 col2 col3 col4
0 x1 y1 z1 a1
1 x2 y2 z2 b2
2 x3 y3 z3 c3
假设我有以下 df
:
df = pd.DataFrame({
'col1':['x1','x2','x3'],
'col2':['y1','y2','y3'],
'col3':['z1','z2','z3'],
'col4':['a1','b2','c3']
})
和元素列表:
l = ['x1','x2','y3']
我想在我的 df
的所有列中搜索 l
的元素,因为它来自我的列表 x1
并且 x2
出现在 [=19] =] 并且 y3
在 col2
中,所以我做了:
df.loc[df['col1'].apply(lambda x: True if any(i in x for i in l) else False)|
df['col2'].apply(lambda x: True if any(i in x for i in l) else False)]
这给了我
col1 col2 col3 col4
0 x1 y1 z1 a1
1 x2 y2 z2 b2
2 x3 y3 z3 c3
根据需要,但上述方法需要我为每一列创建一个 |
运算符。所以我想知道如何在不对每一列使用 |
的情况下有效地对所有列进行迭代?
很多,很多更有效的方法是使用 numpy 广播。
row_mask = (df.to_numpy() == l[:, None, None]).sum(axis=0).any(axis=1)
filtered = df[row_mask]
输出:
>>> filtered
col1 col2 col3 col4
0 x1 y1 z1 a1
1 x2 y2 z2 b2
2 x3 y3 z3 c3