【问题标题】:Creating dummy columns with real values创建具有实际值的虚拟列
【发布时间】:2023-04-06 14:14:01
【问题描述】:

我有一个如下图所示的DF:

DF =
id  Result      
1   Li_In-AR-B
1   Li_In-AR-L
3   N
4   Lo_In-AR-U
5   Li_In-AR-U
6   Or_Ba-AR-B
6   Or_Ba-AR-L
7   N

现在我想在第一个“-”之前为Result 中的每个唯一值创建新列。新列中的所有其他值都应设置为N

DF =
id  Result        Li_In         Lo_In       Or_Ba
1   Li_In-AR-B    Li_In-AR-B    N           N
1   Li_In-AR-L    Li_In-AR-L    N           N      
3   N             N             N           N
4   Lo_In-AR-U    N             Lo_In-AR-U  N
5   Li_In-AR-U    Li_In-AR-U    N           N
6   Or_Ba-AR-B    N             N           Or_Ba-AR-B
6   Or_Ba-AR-L    N             N           Or_Ba-AR-L
7   N             N             N           N

我以为我可以使用 .get_dummies 轻松做到这一点,但这只会在每个单元格中返回一个二进制值。

DF_dummy = DF.Result.str.get_dummies(sep='-')
DF = pd.concat([DF,DF_dummy ],axis=1)

任何想法

【问题讨论】:

    标签: python pandas dataframe dummy-data


    【解决方案1】:

    通过split 创建布尔值DataFrame,删除列N 并通过1 进行比较。然后创建DataFrameDataFrame.where 相同的列,如掩码和替换值:

    m = DF['Result'].str.split('-', n=1).str[0].str.get_dummies().drop('N', axis=1) == 1
    df1 = pd.concat([DF['Result']] * len(m.columns), axis=1, keys=m.columns)
    
    df = DF.join(df1.where(m.values, 'N'))
    print (df)
       id      Result       Li_In       Lo_In       Or_Ba
    0   1  Li_In-AR-B  Li_In-AR-B           N           N
    1   1  Li_In-AR-L  Li_In-AR-L           N           N
    2   3           N           N           N           N
    3   4  Lo_In-AR-U           N  Lo_In-AR-U           N
    4   5  Li_In-AR-U  Li_In-AR-U           N           N
    5   6  Or_Ba-AR-B           N           N  Or_Ba-AR-B
    6   6  Or_Ba-AR-L           N           N  Or_Ba-AR-L
    7   7           N           N           N           N
    

    【讨论】:

    • 当我有这样的一行“1:Li_In-AR-B,Or-Ba-AR-B”时,我应该改变什么?我需要将这两个放在单独的列中。
    • @ThelMi 你觉得1: Li_In-AR-B, Or_Ba-AR-B_Or 之后?
    • ,后面还有空格吗?
    • @ThelMi - 嗯,我创建了解决方案,不幸的是不能使用旧的解决方案。您认为,是否可以通过将 1 Li_In-AR-B 更改为 1 Li_In-AR-B, Or_Ba-AR-B 并更改预期输出来创建新问题?在我看来,编辑这个问题更好。谢谢。
    • 然后我可以添加新问题的答案。
    猜你喜欢
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 2010-11-08
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    相关资源
    最近更新 更多