为了账号安全,请及时绑定邮箱和手机立即绑定

当一列中有多个类别时如何编码

当一列中有多个类别时如何编码

holdtom 2021-09-24 14:39:08
我的数据框看起来像这样为用户提供多个分类变量的 Pandas 数据框我确保其中没有重复项。我想对它进行编码,我希望我的最终输出是这样的我尝试直接使用熊猫假人,但没有得到想要的结果。谁能帮我解决这个问题??
查看完整描述

3 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

IIUC,你user是空的,一切都在name。如果是这样,你可以

pd.pivot_table(df, index=df.name.str[0], columns=df.name.str[1:].values, aggfunc='count').fillna(0)


查看完整回答
反对 回复 2021-09-24
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

您可以在拆分的每一行name使用r'(\d+)'从字母单独的数字,与使用pd.crosstab:


d = pd.DataFrame(df.name.str.split(r'(\d+)').values.tolist())

pd.crosstab(columns=d[2], index=d[1], values=d[1], aggfunc='count')


查看完整回答
反对 回复 2021-09-24
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

假设以下数据帧:


   user name

0     1    a

1     1    b

2     1    c

3     1    d

4     2    a

5     2    b

6     2    c

7     3    d

8     3    e

9     3    f

你可以GROUPBY用户,然后使用get_dummmies:


import pandas as pd


# create data-frame

data = [[1, 'a'], [1, 'b'], [1, 'c'], [1, 'd'], [2, 'a'],

        [2, 'b'], [2, 'c'], [3, 'd'], [3, 'e'], [3, 'f']]

df = pd.DataFrame(data=data, columns=['user', 'name'])


# group and get_dummies

grouped = df.groupby('user')['name'].apply(lambda x: '|'.join(x))

print(grouped.str.get_dummies())

输出


      a  b  c  d  e  f

user                  

1     1  1  1  1  0  0

2     1  1  1  0  0  0

3     0  0  0  1  1  1

作为旁注,您可以在一行中完成所有操作:


result = df.groupby('user')['name'].apply(lambda x: '|'.join(x)).str.get_dummies()


查看完整回答
反对 回复 2021-09-24
  • 3 回答
  • 0 关注
  • 250 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信