作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设我有一个数据框,其中一列是一个列表(具有未知的值和长度),例如:
df = pd.DataFrame(
{'messageLabels': [['Good', 'Other', 'Bad'],['Bad','Terrible']]}
)
我遇到了这个解决方案,但它不是我要找的。 How best to extract a Pandas column containing lists or tuples into multiple columns
理论上生成的 df 看起来像
messageLabels | Good| Other| Bad| Terrible
--------------------------------------------------------
['Good', 'Other', 'Bad'] | True| True |True| False
--------------------------------------------------------
['Bad','Terrible'] |False|False |True| True
见上文
最佳答案
df.join(df.messageLabels.str.join('|').str.get_dummies().astype(bool))
messageLabels Bad Good Other Terrible
0 [Good, Other, Bad] True True True False
1 [Bad, Terrible] True False False True
sklearn
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
dum = mlb.fit_transform(df.messageLabels)
df.join(pd.DataFrame(dum.astype(bool), df.index, mlb.classes_))
messageLabels Bad Good Other Terrible
0 [Good, Other, Bad] True True True False
1 [Bad, Terrible] True False False True
n = len(df)
i = np.arange(n)
l = [*map(len, df.messageLabels)]
j, u = pd.factorize(np.concatenate(df.messageLabels))
o = np.zeros((n, len(u)), bool)
o[i.repeat(l), j] = True
df.join(pd.DataFrame(o, df.index, u))
messageLabels Good Other Bad Terrible
0 [Good, Other, Bad] True True True False
1 [Bad, Terrible] False False True True
并受到 Andy 的启发
df.join(pd.DataFrame([dict.fromkeys(x, True) for x in df.messageLabels]).fillna(False))
messageLabels Bad Good Other Terrible
0 [Good, Other, Bad] True True True False
1 [Bad, Terrible] True False False True
关于python - 如何对 pandas 列中的列表执行一次热编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56298815/
我是一名优秀的程序员,十分优秀!