【问题标题】:Pandas/Python: split column based on a dictionaryPandas/Python:基于字典拆分列
【发布时间】:2016-06-15 09:37:26
【问题描述】:

我有一个 Pandas 数据框,其中有一列包含逗号分隔值:

a,c,f
a,b,c,d,e
c,g,f,b
..

每一行都有不同的长度、不同的顺序和值。这是 a 到 m 的字母。

我想把它转换成 0 和 1 的 13 列:

a b c d e f g h i j k l m
1 0 0 0 0 1 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
0 1 1 1 1 0 0 0 0 0 0 0 0

如何在 pandas / python 2.7 中有效地做到这一点? 我曾想过根据列中是否存在子字符串的测试来创建列.. 但我不敢相信没有更有效的方法:)

【问题讨论】:

    标签: python-2.7 pandas split


    【解决方案1】:

    如果列为a,您可以使用get_dummies

    print df.a
    0        a,c,f
    1    a,b,c,d,e
    2      c,g,f,b
    Name: a, dtype: object
    
    print df.a.str.get_dummies(sep=',')
       a  b  c  d  e  f  g
    0  1  0  1  0  0  1  0
    1  1  1  1  1  1  0  0
    2  0  1  1  0  0  1  1
    

    【讨论】:

    • 太好了,谢谢!我有 get_dummies,但我获得了 100 多列。我不记得我做错了什么! 'sep' 没有在 get_dummies 中作为参数出现:pandas.pydata.org/pandas-docs/stable/generated/…,怎么会? --
    • 我认为你需要str.get_dummies 而不是get_dummies
    • 哦,我明白了,谢谢!接受参数 sep=',' 的 df.a.str.get_dummies() 和不接受参数 sep=',' 的 pd.get_dummies() 有什么区别?
    • 我认为str.get_dummies(sep=',') 已针对Series(或列)中的string 操作进行了优化,而pd.get_dummies() 是针对所有df 进行优化的通用功能。
    • 很高兴能帮到你!祝你好运!你也可以投票支持我的解决方案——点击2上方accept mark.附近的黑色三角形谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-07-14
    • 2018-11-04
    • 2018-05-26
    • 2018-05-27
    • 1970-01-01
    • 2021-10-04
    • 2023-01-27
    • 2016-12-21
    相关资源
    最近更新 更多