簡體   English   中英

如何比較 pandas 數據框列中分隔字符串中的每個元素與 python 列表 object 元素

[英]How to compare the each elements in the delimited string in pandas data frame column with a python list object elements

我有一個數據框,它有一個分隔字符串列,必須與列表進行比較。 如果分隔字符串中元素的結果與列表元素相交,則考慮該行。

例如

test_lst = [20, 45, 35]
data = pd.DataFrame({'colA': [1, 2, 3],
          'colB': ['20,45,50,60', '22,70,35', '10,90,100']}) 

應該有 output 因為元素 20,45 在第一行的 DF 中的列表變量和分隔文本中都很常見。

同樣,第 2 行有 35 個相交

可樂 colB
1個 20,45,50,60
2個 22,70,35

我試過的是

test_lst = [20, 45, 35]
data["colC"]= data['colB'].str.split(',')
data

# data["colC"].apply(lambda x: set(x).intersection(test_lst))
print(data[data['colC'].apply(lambda x: set(x).intersection(test_lst)).astype(bool)])
data

沒有給出所需的結果。

任何幫助表示贊賞

這可能不是最好的方法,但它確實有效。

import pandas as pd

df = pd.DataFrame({'colA': [1, 2, 3],
          'colB': ['20,45,50,60', '22,70,35', '10,90,100']}) 

def match_element(row):
    row_elements = [int(n) for n in row.split(',')]
    test_lst = [20, 45, 35]
    
    if [value for value in row_elements if value in test_lst]:
        return True
    else:
        return False

mask = df['colB'].apply(lambda row: match_element(row))
df = df[mask]

output:

可樂 colB
0 1個 20,45,50,60
1個 2個 22,70,35

暫無
暫無

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

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