根据列值添加行



数据帧--->只有列['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, False1,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

相关内容

  • 没有找到相关文章

最新更新