当DataFrame行中字符串匹配列名时,向对应列写入值1
解决方案
你可以通过pandas的索引定位或哑变量生成两种方式实现需求,具体如下:
方法一:直接索引赋值(简洁高效)
利用行索引和string列的列名直接定位目标位置,将对应单元格设为1:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame(0, index=[0,1,2,3], columns=["string","a","b","c","d"]) df["string"] = ["b", "b", "c", "a"] # 定位对应行和列,赋值为1 df.loc[df.index, df["string"]] = 1 print(df)
运行输出:
string a b c d 0 b 0 1 0 0 1 b 0 1 0 0 2 c 0 0 1 0 3 a 1 0 0 0
方法二:哑变量生成(适配扩展场景)
如果需要处理更多类别或标准化输出,可通过get_dummies生成哑变量矩阵,再与原数据合并:
import pandas as pd df = pd.DataFrame(0, index=[0,1,2,3], columns=["string","a","b","c","d"]) df["string"] = ["b", "b", "c", "a"] # 基于string列生成哑变量 dummies = pd.get_dummies(df["string"]) # 合并原string列与哑变量,对齐原DataFrame列顺序 result = pd.concat([df["string"], dummies], axis=1).reindex(columns=df.columns, fill_value=0) print(result)
该方法会自动适配string列中出现的所有列名,后续新增列时无需修改逻辑。
内容的提问来源于stack exchange,提问作者Shem
相关产品推荐
相关产品推荐

