【问题标题】:How to make a binary decomposition of pandas.Series column如何对 pandas.Series 列进行二元分解
【发布时间】:2015-07-14 10:05:47
【问题描述】:

我想将 pandas.Series 分解为其他几列(列数 = 值数),保存该分解并将其与其他 DataFrameSeries 一起使用。像pandas.get_dummies 这样的东西会记住映射并可以处理NaN

示例。
鉴于以下DataFrame

A B 0 a 0 1 b 1 2 a 2 3 c 3

我想将系列A分解为:

A_a A_b A_c B 0 1 0 0 0 1 0 1 0 1 2 1 0 0 2 3 0 0 1 3

然后我想保存该分解并将其应用到其他 DataFrame (看看输入在 A 列中没有 c 值):

A B A_a A_b A_c B 0 a 0 0 1 0 0 0 1 a 1 -> 1 1 0 0 1 2 b 2 2 0 1 0 2

这样的事情有什么自动的方法吗?我可以手动完成。 我正在尝试scikit-learn LabelEncoder,但它无法处理NaNs。我想将它用于分类模型。

【问题讨论】:

    标签: python pandas machine-learning scikit-learn


    【解决方案1】:

    我认为没有办法自动执行此操作:

    In [11]: res = df.pop("A").str.get_dummies()  # Note: pop removes column A from df
    
    In [12]: res.columns = res.columns.map(lambda x: "A_" + x)
    
    In [13]: res
    Out[13]:
       A_a  A_b  A_c
    0    1    0    0
    1    0    1    0
    2    1    0    0
    3    0    0    1
    
    In [14]: res.join(df)
    Out[14]:
       A_a  A_b  A_c  B
    0    1    0    0  0
    1    0    1    0  1
    2    1    0    0  2
    3    0    0    1  3
    

    为了标准化,我会在你想要的列上使用reindex_axis。即强制 df2 具有 df1 的列。

    df2.reindex_axis(df1.columns, axis=1, fill_value=0)
    

    【讨论】:

    • 正如问题中所写 - 我知道get_dummies - 但这并不能解决我将相同映射应用于其他系列对象的问题。您不需要在列上使用 map - get_dummies 有一个可选参数 prefix
    • reindex_axis 不是你想要的吗?
    • 是的。现在它是有道理的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 2017-02-08
    • 2016-07-26
    • 2017-02-10
    相关资源
    最近更新 更多