如何转换列的值列表并将其分配为 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 获取位值并将其转换为布尔值?
如何选择 JSON 的特定部分并将其转换为使用 Moshi 改造的列表