簡體   English   中英

Pandas 獲取 dataframe A 中包含 dataframe B 的 substring 的所有行

[英]Pandas get all rows in dataframe A that contain substring of dataframe B

所以我有 2 個數據框,

dataframe 1: 在此處輸入圖像描述

dataframe 2: 在此處輸入圖像描述

我想獲取 dataframe1 中包含 dataframe 2 中 columnB 的 substring 的所有行:

在此處輸入圖像描述

我正在使用df1['columnA'].isin(df2['columnB'])但我無法正常工作。

我應該如何實現這一目標?

您可以執行以下操作:

import pandas as pd
df1 = pd.DataFrame({"columnA":["apple, orange","pear, apple, lemon","banana, pear","cherry, pear, lemon"]})
df2 = pd.DataFrame({"columnB":["apple","cherry"]})

out = df1[df1.columnA.str.contains('|'.join(df2.columnB.values))]

那么你的 output DataFrame將是:

>>> out
               columnA
0        apple, orange
1   pear, apple, lemon
3  cherry, pear, lemon

怎么運行的

'|'.join(df2.columnB.values)將導致'apple|cherry' ,因為它使用|連接df2columnB的值連接器。

然后str.contains columnAdf1的 columnA 中搜索蘋果或櫻桃詞( |用作或)。

您可以通過以下方式進行列表理解:

df1[df1['columnA'].apply(lambda x: any([y for y in x for z in df2['columnB'] if y in z]))]

首先,您必須確保您的逗號分隔列表實際上是一個 python 列表,盡管df1['columnA'] = df1['columnA'].str.split(',')

完整代碼:

import pandas as pd
df1= pd.DataFrame({'columnA' : ['apple,orange', 'pear,apple,lemon','banana,pear','cherry,pear,lemon']})
df1['columnA'] = df1['columnA'].str.split(',')
df2 = pd.DataFrame({'columnB' : ['apple','cherry']})
df1 = df1[df1['columnA'].apply(lambda x: any([y for y in x for z in df2['columnB'] if y in z]))]
df1

output:

    columnA
0   [apple, orange]
1   [pear, apple, lemon]
3   [cherry, pear, lemon]

列表理解通過檢查每行列表中any每個df1['columnA']值是否在df2['columnB']中來工作。 y代表df1['columnA']的每一行列表中的各個項目, x代表df1['columnA']每一行。 最后, z代表df2['columnB']每一行。 因此,最終,您需要返回True如果任何y列表項在z中使用anyFalse如果不是為了設置 boolean 屏蔽以過濾掉不需要的包含False的行,即任何給定內的任何項目都沒有匹配項df1['columnA']行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM