当值存在时获取列索引作为值

时间:2019-04-05 13:01:11

标签: python pandas

我需要根据以下内容为我的表或单独的表创建一些其他列:

我有一张桌子

enter image description here

并且我需要创建其他列,其中列索引(列名)将作为值插入。像这样:

enter image description here

如何在大熊猫中做到这一点?有任何想法吗? 谢谢

1 个答案:

答案 0 :(得分:3)

如果仅需要1值的匹配列:

df = (df.set_index('name')
        .eq(1)
        .dot(df.columns[1:].astype(str) + ',')
        .str.rstrip(',')
        .str.split(',', expand=True)
        .add_prefix('c')
        .reset_index())
print (df)

说明

想法是使用True创建布尔掩码,以将其替换为列名称-因此将DataFrame.eq1进行比较,并将所有列的DataFrame.dot与矩阵相乘无需先添加分隔符。然后,用Series.str.rstrip删除最后一个对位分隔符,并将Series.str.split用于新列,将列名更改为DataFrame.add_prefix

另一种解决方案:

df1 = df.set_index('name').eq(1).apply(lambda x: x.index[x].tolist(), 1)
df = pd.DataFrame(df1.values.tolist(), index=df1.index).add_prefix('c').reset_index()