gpt4 book ai didi

python - 如果值=1(二进制值),则提取列名并将它们与分隔符组合并将其放入新列中

转载 作者:行者123 更新时间:2023-12-03 18:36:05 24 4
gpt4 key购买 nike

我有一个带有二进制值的数据框,在使用 Pandas 执行 get_dummies 后

df= 
Values A1 A2 B1 B2 B3 B4 C1 C2 C3
10 1 0 1 0 0 0 1 0 0
12 0 1 0 0 1 0 0 1 0
3 0 1 0 1 0 0 0 0 1
5 1 0 0 0 0 1 1 0 0
我想要一个新列,它包含所有列的组合,其中包含 1
Expected output:

Values A1 A2 B1 B2 B3 B4 C1 C2 C3 Combination
10 1 0 1 0 0 0 1 0 0 A1~~B1~~C1
12 0 1 0 0 1 0 0 1 0 A2~~B3~~C2
3 0 1 0 1 0 0 0 0 1 A2~~B2~~C3
5 1 0 0 0 0 1 1 0 0 A1~~B4~~C3
实际矩阵可以是25000+行*1000+列
在 R 中有一个类似的解决方案,但我在 Python 中需要它 bcoz 所有其他依赖项都在 python 中,而 R 对我来说是新的。
Extract column names with value 1 in binary matrix
Codes in R below, & need similar one or any other code in python which can help me to arrive at my expected output
Solution 1 :
as.matrix(apply(m==1,1,function(a) paste0(colnames(m)[a], collapse = "")))

Solution 2:
t <- which(m==1, arr.ind = TRUE)
as.matrix(aggregate(col~row, cbind(row=rownames(t), col=t[,2]), function(x)
paste0(colnames(m)[x], collapse = "")))
类似的东西怎么可能达到我在 Python 中的预期输出?

最佳答案

df["Combination"] = df.iloc[:, 1:].dot(df.add_suffix("~~").columns[1:]).str[:-2]
我们选择除了 Valuesiloc 之外的列,然后形成一个点积,其中第二个操作数是 df 的各个列,最后添加了 ~~。结果也给出了最后的 ~~,所以我们用 .str[:-2] 砍掉它
要得到
   Values  A1  A2  B1  B2  B3  B4  C1  C2  C3 Combination
0 10 1 0 1 0 0 0 1 0 0 A1~~B1~~C1
1 12 0 1 0 0 1 0 0 1 0 A2~~B3~~C2
2 3 0 1 0 1 0 0 0 0 1 A2~~B2~~C3
3 5 1 0 0 0 0 1 1 0 0 A1~~B4~~C1

关于python - 如果值=1(二进制值),则提取列名并将它们与分隔符组合并将其放入新列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67515873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com