You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python处理DataFrame中的账号对应城市空值填充问题

用Pandas DataFrame填充同一账号的城市空值

核心思路

基于每个账号对应唯一有效城市的前提,先提取账号-城市的映射关系,再用该映射批量填充所有空值,确保同一账号的CityName字段统一。

步骤实现

1. 导入依赖并加载数据

实际场景中可通过pd.read_excel()/pd.read_csv()读取表格文件,以下用你提供的样例数据构造DataFrame:

import pandas as pd

# 构造第一个表格的DataFrame
df1 = pd.DataFrame({
    "Acc numb": [123456]*5 + [910234]*3 + [910324]*4 + [360825]*5 + [123456]*5,
    "CityName": ["", "Delhi", "", "", "", "", "", "", "", "Bangalore", "", "", "", "", "", "Mumbai", "", "", "", "", "", ""]
})

# 构造第二个表格的DataFrame
df2 = pd.DataFrame({
    "Acc numb": [123456]*5 + [910234]*3 + [910324]*4 + [360825]*5 + [123456]*5,
    "CityName": ["Delhi"]*5 + ["Bangalore"]*3 + ["Bangalore"]*4 + ["Mumbai"]*5 + ["", "", "", "", ""]
})

2. 合并表格(可选,按需选择)

若需统一处理两个表格的数据,用pd.concat合并:

merged_df = pd.concat([df1, df2], ignore_index=True)

3. 生成账号-城市映射字典

提取每个账号对应的非空城市值,确保映射唯一:

# 过滤空值、去重,生成账号到城市的映射
city_mapping = merged_df.dropna(subset=["CityName"]) \
                       .drop_duplicates("Acc numb") \
                       .set_index("Acc numb")["CityName"] \
                       .to_dict()

# 单表格处理时,直接替换为对应df即可,比如df1

4. 批量填充空值

用映射字典替换CityName字段的空值:

# 填充合并后的表格
merged_df["CityName"] = merged_df["CityName"].fillna(merged_df["Acc numb"].map(city_mapping))

# 分别填充原始表格
df1["CityName"] = df1["CityName"].fillna(df1["Acc numb"].map(city_mapping))
df2["CityName"] = df2["CityName"].fillna(df2["Acc numb"].map(city_mapping))

5. 验证结果

查看处理后的账号数据,确认空值已被填充:

print(merged_df[merged_df["Acc numb"] == 123456])

特殊场景处理

  • 无有效城市的账号:若某账号无任何非空CityName,填充后仍为空,可追加fillna("Unknown")设置默认值
  • 同一账号多城市值:若账号对应多个不同城市,需先清洗数据,比如取第一个出现的非空值:
    city_mapping = merged_df.dropna(subset=["CityName"]) \
                           .groupby("Acc numb") \
                           .first()["CityName"] \
                           .to_dict()
    

内容的提问来源于stack exchange,提问作者Pythonguy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 14:37:54