【问题标题】:pandas get_dummies() for multiple columns with a pre-defined listpandas get_dummies() 用于具有预定义列表的多列
【发布时间】:2021-08-11 03:20:16
【问题描述】:

我正在努力为我的数据框创建虚拟列。

这是我的原始数据框:

df = pd.DataFrame({'id': ['01', '02', '03'],
                    'Q1': ['a', 'b', 'a'],
                    'Q2': ['c', 'b', 'a']})
print(df)

   id Q1 Q2
0  01  a  c
1  02  b  b
2  03  a  a

我有一个预定义的 Q1 和 Q2 答案列表:

ls = list("abc")
print(ls)
['a', 'b', 'c']

我预期的数据框结构:

   id Q1_a Q1_b Q1_c Q2_a Q2_b Q2_c
0  01    1    0    0    0    0    1
1  02    0    1    0    0    1    0
2  03    1    0    0    1    0    0

请帮忙!谢谢!

【问题讨论】:

    标签: python pandas dummy-variable


    【解决方案1】:

    根据here 的帖子,这里有一个答案:

    df2 = pd.get_dummies(df[['Q1', 'Q2']].astype(pd.CategoricalDtype(categories=ls)))
    df2.insert(0, 'id', df['id'])
    

    输出:

    df2
        id  Q1_a    Q1_b    Q1_c    Q2_a    Q2_b    Q2_c
    0   01     1       0       0       0       0    1
    1   02     0       1       0       0       1    0
    2   03     1       0       0       1       0    0
    

    【讨论】:

    • 非常感谢!这正是我想要的!
    【解决方案2】:

    试试:

    df = pd.DataFrame(
        {"id": ["01", "02", "03"], "Q1": ["a", "b", "a"], "Q2": ["c", "b", "a"]}
    )
    
    ls = list("abc")
    
    idx = pd.MultiIndex.from_product([df.loc[:, "Q1":], ls])
    x = pd.concat(
        {c: pd.get_dummies(df[c]) for c in df.loc[:, "Q1":]}, axis=1
    ).reindex(columns=idx, fill_value=0)
    x.columns = x.columns.map("_".join)
    print(pd.concat([df["id"], x], axis=1))
    

    打印:

       id  Q1_a  Q1_b  Q1_c  Q2_a  Q2_b  Q2_c
    0  01     1     0     0     0     0     1
    1  02     0     1     0     0     1     0
    2  03     1     0     0     1     0     0
    

    【讨论】:

    • 感谢您的快速回复!我在我的数据框上尝试过,它成功了!
    猜你喜欢
    • 1970-01-01
    • 2016-09-19
    • 2013-08-19
    • 1970-01-01
    • 2019-08-11
    • 2017-05-12
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多