问题描述:我需要为每行设置一个变量,但前提是它在同一行第二列的列表范围内。
示例数据帧:
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