我有一个包含两列A和B的df,它们都是包含字符串值的列。
示例:
df_1 = pd.DataFrame(data={
"A":['a','b','c'],
"B":['a x d','z y w','q m c'] #string values not a list
})
print(df_1)
#output
A B
0 a a x d
1 b z y w
2 c q m c
现在我要做的是在df_1中执行loc以获取列B包含列A中的字符串值的所有行。
在本例中,我想要的输出是第一行和第三行:
A B
0 a a x d # 'a x d' contain value 'a'
2 c q m c # 'q m c' contain value 'c'
我尝试了不同的loc条件,但得到了不可散列的类型:"系列"错误:
df_1.loc[df_1["B"].str.contains(df_1["A"])] #TypeError: unhashable type: 'Series'
df_1.loc[df_1["A"] in df_1["B"]] #TypeError: unhashable type: 'Series'
由于df的大小,我真的不想使用for/while循环。
你知道我该怎么做吗?
6条答案
按热度按时间wdebmtf21#
没有矢量方法,使用两列Map
in
。需要在此循环:输出:
速度比较(3000行)
lxkprmvk2#
可爱!
没有进口,但有一个丑陋的邓德.../-:
另外,对于OP ...不要接受这个答案。我只是在打高尔夫球。你不应该在产品代码中使用这个,因为它是不透明的,由于使用2个Map和一个飞溅。
我先说清楚...
mozway's is the better one
v6ylcynt3#
您可以尝试:
numpy
的替代方案:sqyvllje4#
当访问panda中的两个不同列时,可以使用.apply()
这将创建一个布尔级数,可用于只选择'A'在'B'中的列的loc条件:
f3temu5u5#
guicsvcw6#