Python 熊猫过滤器,其中当前行字符串包含不同列中上一行的字符串
我有以下数据帧:Python 熊猫过滤器,其中当前行字符串包含不同列中上一行的字符串,python,pandas,Python,Pandas,我有以下数据帧: df = pd.DataFrame({'col1':['1', np.nan, '2', np.nan, np.nan, '3', '4', '7', np.nan], 'col2':[np.nan, '1,2', np.nan, '0,3', '0,3', np.nan, np.nan, np.nan, '7,8']}) 看起来是这样的: col1 col2 0 1 NaN 1 NaN 1,2 2 2 NaN 3 NaN 0,3 4 NaN
df = pd.DataFrame({'col1':['1', np.nan, '2', np.nan, np.nan, '3', '4', '7', np.nan], 'col2':[np.nan, '1,2', np.nan, '0,3', '0,3', np.nan, np.nan, np.nan, '7,8']})
看起来是这样的:
col1 col2
0 1 NaN
1 NaN 1,2
2 2 NaN
3 NaN 0,3
4 NaN 0,3
5 3 NaN
6 4 NaN
7 7 NaN
8 NaN 7,8
我试图找出如何创建一个向量化过滤器,该过滤器将返回col2
值包含前一行col1
值的行。如果col1
或col2
为NaN
,则不应考虑该行。因此,在该df上,结果应为:
1 NaN 1,2
8 NaN 7,8
起初,我考虑将col1
向下移动1,并使用类似于isin
:
df[(df['col1'].shift(1).fillna('').isin(something in here)]
但是后来我意识到,isin
不会单独处理每一行,也就是说,它会检查每一行是否在同一个列表中。因此,现在我确信我应该使用类似于df['col2'].str.contains(df['col2'])
的东西,但我不太确定如何处理移位以及什么不可以
同样,目标是有一个矢量化过滤器,这样我就可以做到:
filtered_rows = df[(filter_here)]
我将感谢任何帮助
df = pd.DataFrame({'col1':['1', np.nan, '2', np.nan, np.nan, '3', '4', '7', np.nan], 'col2':[np.nan, '1,2', np.nan, '0,3', '0,3', np.nan, np.nan, np.nan, '7,8']})
df['col1_shifted'] = df['col1'].shift(1)
mask = df.apply(
lambda x: x.col1_shifted in str(x.col2).split(',')
if x.col1_shifted
else False, axis=1
)
filtered_rows = df[mask][['col1', 'col2']]
filtered_rows
col1 col2
1 NaN 1,2
8 NaN 7,8