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

时间:2018-12-24 12:42:14

标签: python pandas encoding

我的数据框看起来像这样

具有多个针对用户的分类变量的熊猫数据框

我确保其中没有重复。我想对其进行编码,并希望这样的最终输出

我尝试直接使用熊猫假人,但没有得到想要的结果。 有人可以帮我吗?

4 个答案:

答案 0 :(得分:1)

IIUC,您的user为空,所有内容都在name上。如果是这样,您可以

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

答案 1 :(得分:1)

您可以使用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')

答案 2 :(得分:0)

您可以尝试使用str get_dummies列访问groupby访问器user

df.name.str.get_dummies().groupby(df.user).sum()

示例

给出示例数据框

df = pd.DataFrame({'user': [1]*4 + [2]*4 + [3]*3,
                   'name': ['a', 'b', 'c', 'd']*2 + ['d', 'e', 'f']})

df_dummies = df.name.str.get_dummies().groupby(df.user).sum()
print(df_dummies)

[出]

      a  b  c  d  e  f
user                  
1     1  1  1  1  0  0
2     1  1  1  1  0  0
3     0  0  0  1  1  1

答案 3 :(得分:0)

假定以下数据框:

   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()