将特定列的值与不同文件进行比较

时间:2018-11-20 00:27:24

标签: python pandas dataframe concatenation

我有一个名为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

我需要检查数据帧data的水果N列中的每个水果是否存在于第一个文件中,将1放在第一行的第一列中,然后继续检查文件2和文件3。因此,输出数据帧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 :(得分:1)

我认为您可以使用此

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

那应该创建c1,重复创建其他两列。最后,您想要的所有信息都将位于数据帧数据中。

您可能需要导入numpy

import numpy as pd

答案 1 :(得分:1)

使用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

答案 2 :(得分:0)

首先创建如下数据框:

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

希望对您有所帮助。