создать новый столбец на основе других значений столбца после итерации по нескольким спискам - PullRequest
0 голосов
/ 03 октября 2018

У меня есть фрейм данных, который включает столбец с несколькими продуктами.Я хочу создать новый столбец с типом продукта, который хранится в нескольких списках.

Вот мои списки:

fruits = ['apples', 'oranges', 'bananas']
veggies = ['carrots', 'lettuce', 'onions']
meats = ['steak', 'chicken', 'fish']

У меня есть столбец, содержащий все эти продукты, но я не хочу создавать столбец с типами продуктов.

У меня есть довольно неуклюжее решение для этого, но мне было интересно, есть ли более простой способ перебрать эти списки и добавить тип еды в новый столбец.

Вот мойтекущее решение:

df['food_type'] = np.where(df['foods'].isin(fruits),'fruits',
                        (np.where(df['foods'].isin(veggies),'veggies',                            
                        (np.where(df['foods'].isin(meats),'meats','other')))))

Было бы лучше создать словарь, содержащий списки, и выполнить итерацию по нему?то есть

food_types ={'fruits':['apples','oranges','bananas'],'veggies':['carrots', 'lettuce', 'onions'],'meats': ['steak', 'chicken', 'fish']}

1 Ответ

0 голосов
/ 03 октября 2018

Я бы просто поместил ваши данные в словарь, как вы предложили в своем ОП:

import pandas as pd

fruits = ['apples', 'oranges', 'bananas']
veggies = ['carrots', 'lettuce', 'onions']
meats = ['steak', 'chicken', 'fish']

data = {'fruits': fruits, 'veggies': veggies, 'meats': meats}

df = pd.DataFrame(data)

Выход:

    fruits  veggies    meats
0   apples  carrots    steak
1  oranges  lettuce  chicken
2  bananas   onions     fish

На ваш комментарий это не будет работать, если списокимеют разную длину.Используя ваш оригинальный формат данных, вы можете сделать следующее с apply():

df = pd.DataFrame(fruits + veggies + meats, columns=['foods'])

def find_category(x):

  return [k for k, v in data.items() if x in v][0]

df['food_type'] = df['foods'].apply(find_category)

Выход:

     foods food_type
0   apples    fruits
1  oranges    fruits
2  bananas    fruits
3  carrots   veggies
4  lettuce   veggies
5   onions   veggies
6    steak     meats
7  chicken     meats
8     fish     meats
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...