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

为DataFrame中每个调查ID补全所有地点行(含无目击情况)

解决方案:为每个调查补全所有地点行

核心思路

通过生成调查标识与所有地点的笛卡尔积构建完整的行框架,再与原数据左连接,即可批量补全每个调查的所有地点行,高效适配大数据量处理。

代码实现(以Pandas为例)

假设你的DataFrame包含调查标识列(示例用survey_id)、地点列(location)及观测数据列(示例用animal_sighted),代码如下:

import pandas as pd

# ----------------------
# 1. 替换为你的实际DataFrame
# ----------------------
# 模拟原数据示例
data = {
    "survey_id": [1, 1, 2, 2],
    "location": ["A", "C", "B", "E"],
    "animal_sighted": ["yes", "yes", "yes", "yes"]
}
df = pd.DataFrame(data)

# ----------------------
# 2. 定义所有需要补全的地点
# ----------------------
all_locations = ["A", "B", "C", "D", "E"]

# ----------------------
# 3. 生成完整的调查-地点组合框架
# ----------------------
# 获取所有唯一调查ID
unique_surveys = df["survey_id"].unique()
# 生成笛卡尔积(每个调查ID对应全部5个地点)
full_frame = pd.MultiIndex.from_product(
    [unique_surveys, all_locations],
    names=["survey_id", "location"]
).to_frame(index=False)

# ----------------------
# 4. 左连接补全数据
# ----------------------
result_df = pd.merge(full_frame, df, on=["survey_id", "location"], how="left")

# 可选:将缺失的观测值填充为指定内容(比如"no")
# result_df["animal_sighted"] = result_df["animal_sighted"].fillna("no")

关键说明

  • pd.MultiIndex.from_product是高效生成笛卡尔积的方法,避免循环操作,处理大数据量时性能更优
  • 左连接(how="left")确保所有调查-地点组合都被保留,原数据存在的行保留原值,无观测的行自动填充NaN
  • 若需要统一缺失值的显示(比如用"无"或0代替NaN),直接用fillna()调整即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:12:36