初学者在这里。我想对一列中包含多个分类数据的数据框使用一种热编码。我的数据框看起来像这样,尽管该栏中有更多内容使我无法手动完成:
Title column
Movie 1 Action, Fantasy
Movie 2 Fantasy, Drama
Movie 3 Action
Movie 4 Sci-Fi, Romance, Comedy
Movie 5 NA
etc.
我想要的输出:
Title Action Fantasy Drama Sci-Fi Romance Comedy
Movie 1 1 1 0 0 0 0
Movie 2 0 1 1 0 0 0
Movie 3 1 0 0 0 0 0
Movie 4 0 0 0 1 1 1
Movie 5 0 0 0 0 0 0
etc.
谢谢!
答案 0 :(得分:0)
将输入数据视为:
Maximum pressure Minimum pressure Day
12 21 2013/03/12
25 14 2015/04/16
27 18 2010/09/21
df.loc[max(df['Maximum pressure '] -df['Minimum pressure ']),'Day']
此代码产生所需的输出:
import pandas as pd
data = {'Title': ['Movie 1', 'Movie 2', 'Movie 3', 'Movie 4', 'Movie 5'],
'column': ['Action, Fantasy', 'Fantasy, Drama', 'Action', 'Sci-Fi, Romance, Comedy', np.nan]}
df = pd.DataFrame(data)
df
Title column
0 Movie 1 Action, Fantasy
1 Movie 2 Fantasy, Drama
2 Movie 3 Action
3 Movie 4 Sci-Fi, Romance, Comedy
4 Movie 5 NaN
更新: 我在测试数据中添加了一个空值,并在解决方案的第一行中对其进行了适当处理。
答案 1 :(得分:0)
### Import libraries and load sample data
import numpy as np
import pandas as pd
data = {
'Movie 1': ['Action, Fantasy'],
'Movie 2': ['Fantasy, Drama'],
'Movie 3': ['Action'],
'Movie 4': ['Sci-Fi, Romance, Comedy'],
'Movie 5': ['NA'],
}
df = pd.DataFrame.from_dict(data, orient='index')
df.rename(columns={0:'column'}, inplace=True)
在此阶段,我们的DataFrame如下所示:
column
Movie 1 Action, Fantasy
Movie 2 Fantasy, Drama
Movie 3 Action
Movie 4 Sci-Fi, Romance, Comedy
Movie 5 NA
现在,我们要问的问题是-给定电影的“列”中是否出现了给定类型的单词(“子字符串”)?
为此,我们首先需要一个类型词列表:
### Join every string in every row, split the result, pull out the unique values.
genres = np.unique(', '.join(df['column']).split(', '))
### Drop 'NA'
genres = np.delete(genres, np.where(genres == 'NA'))
根据数据集的大小,这可能会在计算上造成巨大的成本。您提到您已经知道唯一值。因此,您只需手动定义可迭代的“类型”即可。
获取OneHotVectors:
for genre in genres:
df[genre] = df['column'].str.contains(genre).astype('int')
df.drop('column', axis=1, inplace=True)
我们遍历每种流派,我们询问该流派是否存在于“ column”中,这会返回True或False,当我们转换为type('int')时会分别转换为1或0。
我们最终得到:
Action Comedy Drama Fantasy Romance Sci-Fi
Movie 1 1 0 0 1 0 0
Movie 2 0 0 1 1 0 0
Movie 3 1 0 0 0 0 0
Movie 4 0 1 0 0 1 1
Movie 5 0 0 0 0 0 0