【发布时间】:2018-02-24 23:22:20
【问题描述】:
我有
a={0: ['I3925'], 1: ['I3925'], 2: ['I3925'], 3: ['I2355'], 4: ['I2355'], 5: ['I2355'], 6: ['I111'], 7: ['I111'], 8: ['I111'], 9: ['I405'], 10: ['I405'], 11: ['I3878', 'I2864'], 12: ['I3878'], 13: ['I534'], 14: ['I534'], 15: ['I134', 'I2276'], 16: ['I107'], 17: ['I107'], 18: ['I2864']}
其中包含一个用于一个键的补充 I 编号。
b = pd.Series(a,\
index = a.keys(),
name = "a")
pd.get_dummies(b.apply(pd.Series))
然后 get_dummies 不起作用,因为它会创建一个重复的列 1_15 来存储与第二个 I 编号的匹配项,而不是将它们堆叠到同一列中。我不明白为什么。
0_I107 0_I111 0_I134 0_I2355 0_I2864 0_I3878 0_I3925 0_I405 0_I534 1_I2276 1_I2864
0 0 0 0 0 0 0 1 0 0 0 0
1 0 0 0 0 0 0 1 0 0 0 0
2 0 0 0 0 0 0 1 0 0 0 0
3 0 0 0 1 0 0 0 0 0 0 0
4 0 0 0 1 0 0 0 0 0 0 0
5 0 0 0 1 0 0 0 0 0 0 0
6 0 1 0 0 0 0 0 0 0 0 0
7 0 1 0 0 0 0 0 0 0 0 0
8 0 1 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 1 0 0 0
10 0 0 0 0 0 0 0 1 0 0 0
11 0 0 0 0 0 1 0 0 0 0 1
12 0 0 0 0 0 1 0 0 0 0 0
13 0 0 0 0 0 0 0 0 1 0 0
14 0 0 0 0 0 0 0 0 1 0 0
15 0 0 1 0 0 0 0 0 0 1 0
16 1 0 0 0 0 0 0 0 0 0 0
17 1 0 0 0 0 0 0 0 0 0 0
18 0 0 0 0 1 0 0 0 0 0 0
谁能解释一下我做错了什么?
【问题讨论】:
-
您的预期输出是什么样的?
-
因为
b.apply(pd.Series)[0]生成了一个包含两列的数据框。输出将有列columnname_dummyvalue -
您可能正在寻找
pd.Series([v for x in b for v in x]).str.get_dummies()? -
两个键在列表中有两个值(11 & 15)
-
@JohnGalt 好的;谢谢,所以问题不是来自 get_dummies 而是来自系列,但问题是为什么?它应该只将列表转换为系列。我只执行转换,因此可以输入 get_dummies,它不接受列表。我会尝试你提出的表达方式。我实际上只是希望此列的“单元格”包含系列而不是列表,因为它是唯一阻止 get_dummies 工作的东西。亚历山大,你是对的,我将编辑 OP(但这不会改变 pb)。 Scott:我希望重复列的 1 在同一列中处于同一级别。
标签: python pandas dummy-variable