如何转换列的值列表并将其分配为 0 或 1

Posted

技术标签:

【中文标题】如何转换列的值列表并将其分配为 0 或 1【英文标题】:how to convert list of values of a coulmn and assign it 0 or 1 【发布时间】:2018-02-15 08:43:09 【问题描述】:

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

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

【问题讨论】:

请向我们展示您的代码、您尝试过的内容以及您需要帮助的地方 你能展示一下你是如何创建这个数据框的代码 item 列包含值列表。我说的对吗? 样本111, 333, 444之间有空格吗?还是111,333,444 没有空格@jezrael 【参考方案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

【讨论】:

您可以添加strip 喜欢(df.set_index('user')['items'].str.strip('[]').str.get_dummies(',')) userRatings= df[df.user== A][[1,2]] 拉出 Y/N .. 它给我一个错误。索引超出范围 你需要什么? [1,2] 是列的位置? 我觉得你需要df.loc[['A'], df.columns[[0,1]]]

以上是关于如何转换列的值列表并将其分配为 0 或 1的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SqlDataReader 获取位值并将其转换为布尔值?

Apache Spark:数据框中行值列表的百分比

如何选择 JSON 的特定部分并将其转换为使用 Moshi 改造的列表

如何使用 struct.unpack 并将其转换为 Objective-c 中的值

如何将数字枚举列转换为 tinyint?

如何将嵌套列表中的值转换为集合?