逐行比较数据帧中的两个字符串列



问题描述:我需要为每行设置一个变量,但前提是它在同一行第二列的列表范围内。

示例数据帧:

df = pd.Dataframe({'col1': ['A', 'T' , 'P', 'Z'], 'col2': ['A, B, C', 'D, E, F' , 'G, H, I, P', 'M, N, R, ZGTR']})

我需要接收 Col1 是 Col2 一部分的所有行。 预期成果:

col1    col2
'A'     'A, B, C'
'P'     'G, H, I, P'

我的方法返回一个关于系列对象可变且无法散列的 TypeError:

df[df['col2'].str.match(df['col1'])]

据我了解,我必须以某种方式指出,比较应该在一行内完成。 我知道itterrows将是一个解决方案,但我更喜欢没有循环的东西。

将列表推导与测试结合使用,in使用拆分值:

import pandas as pd
df = pd.DataFrame({'col1': ['A', 'T' , 'P', 'Z'], 
'col2': ['A, B, C', 'D, E, F' , 'G, H, I, P', 'M, N, R, ZGTR']})
df = df[[b in a.split(', ') for a, b in df[['col2', 'col1']].values]]
print (df)
col1        col2
0    A     A, B, C
2    P  G, H, I, P

最新更新