数据帧--->只有列['234','apple','banana','orange']
现在我有一个类似的列表
l=['apple', 'banana']
从另一个数据帧列中提取我从专栏成果中获取专栏的独特价值。水果.unique((结果是数组[((]只需在索引值上循环即可获得项目列表,并将其存储在列表中
在列表上循环以检查列表中的值是否显示在数据帧的列中。如果存在,则为匹配列标题的值添加1,否则为匹配的值添加0。在上面的情况下,匹配后的数据帧应该看起来像:
234 apple banana orange
0 1 1 0
如果需要一行DataFrame,请将Index.to_frame
转换为DataFrame的列名与DataFrame.isin
进行比较,然后对于映射True, False
到1,0
,请转换为整数并转置:
df = pd.DataFrame(columns=['234','apple','banana','orange'])
l=['apple', 'banana']
df = df.columns.to_frame().isin(l).astype(int).T
print (df)
234 apple banana orange
0 0 1 1 0
如果是嵌套列表,请使用MultiLabelBinarizer
:
df = pd.DataFrame(columns=['234','apple','banana','orange'])
L= [['apple', 'banana'], ['apple', 'orange', 'apple']]
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
df = (pd.DataFrame(mlb.fit_transform(L),columns=mlb.classes_)
.reindex(df.columns, fill_value=0, axis=1))
print (df)
234 apple banana orange
0 0 1 1 0
1 0 1 0 1
编辑:如果数据来自另一个DataFrame列,则解决方案与第二个非常相似:
df = pd.DataFrame(columns=['234','apple','banana','orange'])
df1 = pd.DataFrame({"col":[['apple', 'banana'],['apple', 'orange', 'apple']]})
print (df1)
col
0 [apple, banana]
1 [apple, orange, apple]
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
df = (pd.DataFrame(mlb.fit_transform(df1['col']),columns=mlb.classes_)
.reindex(df.columns, fill_value=0, axis=1))
print (df)
234 apple banana orange
0 0 1 1 0
1 0 1 0 1