簡體   English   中英

如何檢查字典值中的任何元素是否在字符串中?

[英]How to check if any of elements in a dictionary value is in string?

我有一個帶有字符串的 dataframe 和一個字典,其中的值是字符串列表。 我需要檢查 dataframe 的每個字符串是否包含字典中每個值的任何元素。 如果是這樣,我需要用字典中的適當鍵 label 它。 我需要做的就是使用字典中的鍵對 dataframe 中的所有字符串進行分類。

例如。

   df = pd.DataFrame({'a':['x1','x2','x3','x4']})
   d = {'one':['1','aa'],'two':['2','bb']}

我想得到這樣的東西:

   df = pd.DataFrame({
          'a':['x1','x2','x3','x4'],
          'Category':['one','two','x3','x4']})

我試過這個,但沒有奏效:

   df['Category'] = np.nan
   for k, v in d.items():
       for l in v:
           df['Category'] = [k if l in str(x).lower() else x for x in df['a']]

任何想法表示贊賞!

首先創建一個 function 為您執行此操作:-

def func(val):
    for x in range(0,len(d.values())):      
        if val in list(d.values())[x]:
            return list(d.keys())[x]

現在使用split()apply()方法:-

df['Category']=df['a'].str.split('',expand=True)[2].apply(func)

最后使用fillna()方法:-

df['Category']=df['Category'].fillna(df['a'])

現在,如果您打印df您將獲得預期的 output:-

    a   Category
0   x1  one
1   x2  two
2   x3  x3
3   x4  x4

編輯:

您也可以通過以下方式執行此操作:-

def func(val):
    for x in range(0,len(d.values())):
        if any(l in val for l in list(d.values())[x]): 
            return list(d.keys())[x]

然后:-

 df['Category']=df['a'].apply(func) 

最后:-

df['Category']=df['Category'].fillna(df['a'])

我想出了以下啟發式方法,看起來很臟。 它會輸出您想要的結果,盡管有一些警告,因為我使用了 append 值的索引到 dataframe。

import pandas as pd
import numpy as np


def main():
    df = pd.DataFrame({'a': ['x1', 'x2', 'x3', 'x4']})
    d = {'one': ['1', 'aa'], 'two': ['2', 'bb']}
    found = False
    i = 0
    df['Category'] = np.nan
    for x in df['a']:
        for k,v in d.items():
            for item in v:
                if item in x:
                    df['Category'][i] = k
                    found = True
                    break
                else:
                    df['Category'][i] = x
            if found:
                found = False
                break
        i += 1

    print(df)


main()

暫無
暫無

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

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