Цикл по списку строк в Python - PullRequest
1 голос
/ 24 июня 2019

У меня есть список, который состоит из разных цветов, все хранятся в виде строковых переменных.

Preferredcolours = ['red','yellow','green', 'blue']

У меня есть массив панд, который содержит информацию об автомобилях. Один из столбцов DfCar ['color'] состоит из цветов этих автомобилей. Я хочу создать новую переменную в моем фрейме данных, столбец с именем PreferredMathcing, который = 1, если цветовой столбец DataFrame совпадает с одним из цветов списка. Как я могу использовать цикл для решения этой проблемы?

В идеале я бы хотел такого решения:

+=================+============================+
| DfCar['colour'] | DfCar['PreferredMathcing'] |
+=================+============================+
| white           |                          0 |
+-----------------+----------------------------+
| yellow          |                          1 |
+-----------------+----------------------------+
| black           |                          0 |
+-----------------+----------------------------+
| purple          |                          0 |
+-----------------+----------------------------+
| green           |                          1 |
+-----------------+----------------------------+

Ответы [ 4 ]

1 голос
/ 24 июня 2019

вы можете использовать .isin () , который возвращает ряд с True / False для каждой строки, исходя из того, находится ли он в списке значений.затем используйте .astype(int), чтобы получить 1 / 0.

попробуйте это:

import pandas as pd
import numpy as np

df = pd.DataFrame.from_dict({'colour': ['white', 'yellow', 'black', 'purple', 'green']})
Preferredcolours = ['red','yellow','green', 'blue']

df["PreferredMathcing"] = df['colour'].isin(Preferredcolours).astype(int)

print(df)

вывод:

   colour  PreferredMathcing
0   white                  0
1  yellow                  1
2   black                  0
3  purple                  0
4   green                  1

ПРИМЕЧАНИЕ:

выбор решения с чистой библиотечной функцией, скорее всего, превзойдет решение, используя apply с пользовательской логикой python.

сопоставление тех, кто находится на моем компьютерепредлагает .isin() почти в 8 раз быстрее:

with '.isin()': 1.0591506958007812
with '.apply()': 8.234664678573608
ratio: 7.774780974248154

1 голос
/ 24 июня 2019

следующее даст вам вывод

def check_colour(x, Preferredcolours) :
    return 1 if x['colour'] in Preferredcolours else 0

dfCar['PreferredMathcing'] = df.apply(check_colour,args=(Preferredcolours,), axis=1)
0 голосов
/ 24 июня 2019

Предполагая, что DfCar является вашим Dataframe.

Preferredcolours = ['red','yellow','green', 'blue']    
DfCar['PreferredMatching'] = DfCar['colour'].apply(lambda x: x in Preferredcolours)

Это будет применять лямбда-функцию ко всем элементам в вашем столбце "color".Просто проверьте, находится ли он в «предпочитаемых цветах», и верните значение «Истина» или «Ложь».

0 голосов
/ 24 июня 2019

Вы можете использовать np. везде, как показано ниже:

import pandas as pd
import numpy as np

DfCar = pd.DataFrame.from_dict({'colour': ['white', 'yellow', 'black', 'purple', 'green']})
Preferredcolours = ['red','yellow','green', 'blue']

DfCar['PreferredMathcing'] = np.where(DfCar['colour'].isin(Preferredcolours), 1, 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...