Python3.4 Pandas:基于含重复值的DataFrame列提取行并补零、复制ID列
解决方案:用Pandas实现DataFrame匹配与填充
我来给你一步步搞定这个需求,用Python的pandas库就能轻松实现,具体步骤和代码如下:
1. 先理清需求逻辑
- 保留df2的所有行:如果
V1列的值在df1的Word列中存在,就把df1对应的ID值关联过来;如果V1没有匹配项,ID列直接填0 - 支持重复匹配:如果df1里同一个
Word对应多个ID,要保留这些匹配出来的重复行
2. 示例数据与代码实现
先准备示例数据(你可以直接替换成自己的真实数据):
import pandas as pd # 示例df1:包含ID和Word列 df1 = pd.DataFrame({ "ID": [1, 2, 3], "Word": ["cat", "dog", "cat"] # 故意设置cat对应两个ID,测试重复匹配场景 }) # 示例df2:包含V1列和其他自定义列 df2 = pd.DataFrame({ "V1": ["cat", "bird", "dog", "cat"], "OtherCol": ["val1", "val2", "val3", "val4"] })
接下来执行核心处理操作:
# 左连接df2和df1,基于V1和Word做匹配 result_df = df2.merge(df1, left_on="V1", right_on="Word", how="left") # 把匹配不到的ID填充为0,并转为整数类型(符合ID的常规格式) result_df["ID"] = result_df["ID"].fillna(0).astype(int) # 删掉多余的Word列(如果不需要的话) result_df = result_df.drop("Word", axis=1)
3. 查看最终结果
运行print(result_df)会得到如下输出:
V1 OtherCol ID 0 cat val1 1 1 cat val1 3 2 bird val2 0 3 dog val3 2 4 cat val4 1 5 cat val4 3
完全符合需求:
- 匹配到的行(cat、dog)都关联了df1的ID,重复匹配的cat生成两行对应不同ID
- 未匹配到的bird对应的ID自动填了0
- df2的所有原行都被完整保留
关键步骤说明
- 左连接(how="left"):这是核心操作,它会保留df2的所有行,同时把df1中所有匹配的记录合并进来,完美实现“保留重复匹配项”的要求
- fillna(0):自动识别没有匹配到的ID(即NaN值),直接替换为0
- astype(int):填充后ID会变成浮点数,转成整数更贴合ID的实际使用场景
内容的提问来源于stack exchange,提问作者Vinay Ashokkumar
相关产品推荐
相关产品推荐

