簡體   English   中英

檢查來自不同列表的元素是否在 df 列和 append 到另一列

[英]Check if elements from different lists are in df column and append to another column

我有一個這樣的 df:

卡薩 名稱 clase_jfs 類別
只是為了運動 mochila 銳步活躍 配飾 摩奇拉
只是為了運動 tubo lejopi de pelotas softee 配飾 吐蕃
只是為了運動 pum de medias puma x2 配飾
只是為了運動 gorro adidas de natación 3 rayas 配飾 納塔西翁

還有 27 個不同的列表,如下所示:

MODA=['mochila','wear', 'urban', 'pack']
TENIS=['tubo', 'raqueta','red']
NATACION=['natacion', 'pileta','tapon']

另一方面,我有一個空列表:

intermedia1=[]

這是我當前的腳本:

for element in df_JFS['Categoria']:       
    if  element in VOLEY:
        intermedia1.append('VOLEY')
    elif element in UNIFORMES:
        intermedia1.append('UNIFORMES')
    elif element in TREKKING_OUTDOOR_ADVENTURE:
        intermedia1.append('TREKKING_OUTDOOR_ADVENTURE')        
    elif element in TRAINING:
        intermedia1.append('TRAINING')        
    elif element in TENIS:
        intermedia1.append('TENIS')        
    elif element in SURF:
        intermedia1.append('SURF')        
    elif element in SQUASH:
        intermedia1.append('SQUASH')  
    elif element in SKATEBOARD:
        intermedia1.append('SKATEBOARD')                    
    elif element in RUNNING:
        intermedia1.append('RUNNING')        
    elif element in RUGBY:
        intermedia1.append('RUGBY')
    elif element in PING_PONG:
        intermedia1.append('PING_PONG')
    elif element in PESAS:
        intermedia1.append('PESAS')
    elif element in PADDLE:
        intermedia1.append('PADDLE')
    elif element in NATACION:
        intermedia1.append('NATACION')
    elif element in MODA:
        intermedia1.append('MODA')
    elif element in INFANTIL:
        intermedia1.append('INFANTIL')
    elif element in HOCKEY:
        intermedia1.append('HOCKEY')
    elif element in HANDBALL:
        intermedia1.append('HANDBALL')
    elif element in GOLF:
        intermedia1.append('GOLF')
    elif element in FUTBOL:
        intermedia1.append('FUTBOL')
    elif element in FRONTON:
        intermedia1.append('FRONTON')
    elif element in CICLISMO:
        intermedia1.append('CICLISMO')
    elif element in BASQUET:
        intermedia1.append('BASQUET')
    elif element in BASICOS:
        intermedia1.append('BASICOS')
    elif element in BASEBALL_SOFTBALL:
        intermedia1.append('BASEBALL_SOFTBALL')
    elif element in ARTES_MARCIALES_Y_BOX:
        intermedia1.append('ARTES_MARCIALES_Y_BOX')
    elif element in AEROBICS_Y_FITNESS:
        intermedia1.append('AEROBICS_Y_FITNESS')
    else:
        intermedia1.append('OTROS')
        
df_JFS['Categoria']=intermedia1

如何才能高效完成?

output 應如下所示:

卡薩 名稱 clase_jfs 類別
只是為了運動 mochila 銳步活躍 配飾 MODA
只是為了運動 tubo lejopi de pelotas softee 配飾 網球運動
只是為了運動 pum de medias puma x2 配飾 MODA
只是為了運動 gorro adidas de natación 3 rayas 配飾 納塔西翁

df['Categoria'] 值,應為找到單詞的列表的名稱

謝謝!

不確定時間效率,但如果你想防止樣板代碼,你可以使用apply function 以及其他一些步驟:

import pandas as pd
# Defining the lists of data(rest of the code)
# .
# .
myDict ={'MODA':MODA, "TENIS":TENIS, "NATACION":NATACION} 
def search(valueToSearch):
  for key, valuesList in myDict.items():
    if valueToSearch in  valuesList:
      return key
  return "Not Found"
df["Categoria"] = df["Categoria"].apply(search)
df

Output

卡薩 名稱 clase_jfs 類別
0 只是為了運動 mochila 銳步活躍 配飾 MODA
1個 只是為了運動 tubo lejopi de pelotas softee 配飾 網球運動
2個 只是為了運動 pum de medias puma x2 配飾 MODA
3個 只是為了運動 gorro adidas de natación 3 rayas 配飾 納塔西翁

請注意,您應該如上所示定義myDict 如果您有任何其他列表,您應該以相同的方式在myDict變量中定義它們。

我建議的方法很少

方法一

在列表中查找內容的復雜度為O(n) 它優化了你可以使用一個集合而不是O(1)

MODA = set(['mochila', 'wear', 'urban', 'pack'])

方法二

如果所有列表的所有值都是唯一的,則可以創建一個dict ,將 map 個值作為鍵值。 你可以只寫一個循環到 map 值來鍵入結果應該如下所示:

{
 'mochila': "MODA",
 'wear': "MODA",
 'urban': "MODA",
 'pack': "MODA",
 ...
}

暫無
暫無

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

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