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

2024-03-29 09:00:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要为我的表或基于以下内容的单独表创建一些附加列:

我有一张桌子

enter image description here

我需要创建额外的列,其中列索引(列的名称)将作为值插入。像这样:

enter image description here

在熊猫身上怎么做?有什么想法吗? 谢谢


Tags: 名称桌子
1条回答
网友
1楼 · 发布于 2024-03-29 09:00:54

如果只需要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的布尔掩码-因此用^{}1进行比较,并用^{}的矩阵乘以所有列,而不首先添加分隔符。然后用^{}删除最后一个traling分隔符,并用^{}作为新列,用^{}更改列名。你知道吗

另一种解决方案:

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()

相关问题 更多 >