我有一个名为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的初学者,所以将不胜感激。
答案 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
希望对您有所帮助。