Сравните значения определенного столбца с различными файлами - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть фрейм данных с именем data, в котором есть 2 столбца:

color  fruitN
red    apple
yellow orange
blue   banana
green  avocado

Кроме того, у меня есть 3 разных файла из одного столбца;каждый из них содержит список фруктов следующим образом:

file1
akee
apricot
avocado

file2
avocado
bilberry
banana
blackberry

file3
blackberry
coconut
cranberry

Мне нужно создать еще один фрейм данных с именем type, у которого число строк равно data = 4, а количество столбцов равно числучисло файлов = 3

Мне нужно проверить каждый фрукт в столбце fruitN кадра данных data, если он существует в первом файле, поставить 1 в первый столбец первого ряда и продолжить проверку в file2 и file3.Итак, выходной фрейм данных type должен выглядеть следующим образом:

c1 c2 c3
0  0  0
0  0  0
0  1  0
1  1  0

Затем, объединенный с data, будет выглядеть так:

color  fruitN c1 c2 c3
red    apple  0  0  0
yellow orange 0  0  0
blue   banana 0  1  0
green  avocado 1 1  0

Я начинающий с Python,поэтому любая помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 20 ноября 2018

Использование isin

l=[f1,f2,f3]
for x,y in enumerate(l):
    df['c'+str(x+1)]=df.fruitN.isin(y.iloc[:,0].tolist()).astype(int)

df
Out[144]: 
    color   fruitN  c1  c2  c3
0     red    apple   0   0   0
1  yellow   orange   0   0   0
2    blue   banana   0   1   0
3   green  avocado   1   1   0
0 голосов
/ 20 ноября 2018

Сначала создайте фреймы данных вроде:

import pandas as pd
data = pd.DataFrame(data=[["red", "apple"], ["yellow", "orange"], ["blue", "banana"], ["green", "avocado"]],
                    columns=["color", "fruitN"])
data = data.set_index("fruitN")
file_1 = ["akee", "apricot", "avocado"]
file_2 = ["avocado", "bilberry", "banana", "blackberry"]
file_3 = ["blackberry", "coconut", "cranberry"]
file_1_df = pd.DataFrame(data=[1] * len(file_1), index=file_1, columns=["type_1"])
file_2_df = pd.DataFrame(data=[1] * len(file_2), index=file_2, columns=["type_2"])
file_3_df = pd.DataFrame(data=[1] * len(file_3), index=file_3, columns=["type_3"])

, затем объединить их с соответствующей осью и установить для сортировки значение false:

data_concat = pd.concat([data, file_1_df, file_2_df, file_3_df], axis=1, sort=False).fillna(0)

затем выберите правильные индексы и переформатируйте данные результатов, как вам нравится, я сделал это, чтобы получить именно то, что вы упомянули, что вам нужно:

res = data_concat.loc[["apple", "orange", "banana", "avocado"]]
res.reset_index(level=0, inplace=True)
res.columns = ["fruitN", "color", "type_1", "type_2", "type_3"]
res = res.ix[:, ["color", "fruitN", "type_1", "type_2", "type_3"]]

print(res)

это дает:

    color   fruitN  type_1  type_2  type_3
0     red    apple     0.0     0.0     0.0
1  yellow   orange     0.0     0.0     0.0
2    blue   banana     0.0     1.0     0.0
3   green  avocado     1.0     1.0     0.0

Надеюсь, это поможет вам.

0 голосов
/ 20 ноября 2018

Я думаю, вы можете использовать это:

data.loc[:, 'c1'] = np.where(data['fruitN'].isin(file1.values(), 1, 0)

Это должно создать c1, повторите для создания двух других столбцов. В конце вся информация, которую вы хотите, будет в данных фрейма данных.

Вам может понадобиться импортировать numpy

import numpy as pd
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...