如何根据id与列号对应键值对填充DataFrame指定位置的数值
DataFrame按id列映射规则填充指定位置解决方案
以下是两种可直接运行的实现方案,基于Python pandas库:
首先构造测试数据,你可以替换为自己的实际数据:
import pandas as pd # 原始全0 DataFrame df = pd.DataFrame({ "id": ["001", "003", "007"], 0: [0, 0, 0], 1: [0, 0, 0], 2: [0, 0, 0] }) # id与目标列映射表 map_df = pd.DataFrame({ "id": ["001", "007"], "col": [2, 0] })
方案1:小数据量首选,逻辑简单易理解
直接遍历映射表逐行赋值,代码可读性最高:
for _, row in map_df.iterrows(): df.loc[df["id"] == row["id"], row["col"]] = 1
方案2:大数据量首选,全矢量化无循环
避免Python层循环,适合万行以上的大规模数据集:
# 构造待填充的位置标记Series fill_series = map_df.assign(val=1).set_index(["id", "col"])["val"] # 索引对齐后填充、恢复原表结构 df = df.set_index("id").stack().add(fill_series, fill_value=0).unstack().reset_index()
注意事项
如果你的原始DataFrame的列0/1/2是字符串类型,只需要先把映射表的col列转为字符串即可:
map_df["col"] = map_df["col"].astype(str)
运行任意方案后输出的df即为你需要的结果:
| id | 0 | 1 | 2 |
|---|---|---|---|
| 001 | 0 | 0 | 1 |
| 003 | 0 | 0 | 0 |
| 007 | 1 | 0 | 0 |
内容的提问来源于stack exchange,提问作者Mac L. Lak
相关产品推荐
相关产品推荐

