如何转换coulmn的值列表并将其指定为0或1

时间:2018-02-15 08:43:09

标签: python python-3.x pandas

如果该用户购买了特定商品,我会尝试分配一个或零。以下是使用的数据集。当我使用假人时,我得到'['括号。

DF:

user    items
A   [111,333,444]
B   [333, 444, 555]
C   [555, 111, 333]
D   [222,333, 333,333]
E   [111,333,444,555]
F   [222,555,111]

输出:

    [111 222 [333 444 [555
A   1   0   1   1   0
B   0   0   1   1   1
C   1   0   1   0   1
D   0   1   1   0   0
E   1   0   1   1   1
F   1   1   0   0   1

代码:

(df.set_index('user')['items'].str.get_dummies(','))

1 个答案:

答案 0 :(得分:1)

使用set_index + get_dummies作为指标,并按stack + reset_index重新整理:

df = (df.set_index('user')['items']
        .str.get_dummies(',')
        .stack()
        .reset_index(name='Y/N')
        .rename(columns={'level_1':'item'}))
print (df)
   user item  Y/N
0     A  111    1
1     A  222    0
2     A  333    1
3     A  444    1
4     A  555    0
5     B  111    0
6     B  222    0
7     B  333    1
8     B  444    1
9     B  555    1
10    C  111    1
11    C  222    0
12    C  333    1
13    C  444    0
14    C  555    1
15    D  111    0
16    D  222    1
17    D  333    1
18    D  444    0
19    D  555    0
20    E  111    1
21    E  222    0
22    E  333    1
23    E  444    1
24    E  555    1
25    F  111    1
26    F  222    1
27    F  333    0
28    F  444    0
29    F  555    1

<强>详细

print (df.set_index('user')['items'].str.get_dummies(','))
      111  222  333  444  555
user                         
A       1    0    1    1    0
B       0    0    1    1    1
C       1    0    1    0    1
D       0    1    1    0    0
E       1    0    1    1    1
F       1    1    0    0    1