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

在R中遍历变量向量、汇总表格并新增列:如何保留零出现城市

嘿,这个问题我之前帮不少人解决过,核心逻辑其实很清晰——你得把那5个城市的列表当成固定基准维度,而不是只从原始数据里提取出现过的城市。下面分几个常用工具给你具体操作方案:

Python Pandas 实现

这是数据处理里最常用的场景,用左连接+空值填充就能搞定:

import pandas as pd

# 模拟你的原始数据
raw_data = pd.DataFrame({
    "城市": ["北京", "北京", "上海", "广州", "深圳"],
    "指标值": [100, 200, 150, 300, 250]
})

# 你的完整城市向量(包含那个出现次数为0的城市)
city_vector = ["北京", "上海", "广州", "深圳", "成都"]

# 第一步:先按城市分组统计
city_stats = raw_data.groupby("城市")["指标值"].sum().reset_index(name="汇总值")

# 第二步:用基准城市列表左连接统计结果,空值填充为0
full_summary = pd.DataFrame({"城市": city_vector}).merge(
    city_stats, on="城市", how="left"
).fillna(0)

print(full_summary)

这里的关键是how="left"——它会强制保留基准列表里的所有城市,原始数据里没匹配到的城市会显示NaN,再用fillna(0)把空值换成0,那个出现次数为0的城市就会出现在最终表格里了。

Excel 实现

如果用Excel处理,操作更直观:

  • 先在工作表的单独一列(比如A列)手动输入你的5个完整城市列表
  • 在相邻列(比如B列)的第一个单元格输入公式:
    =SUMIF(原始数据!$A:$A, A2, 原始数据!$B:$B)
  • 下拉公式到所有城市行,没有数据的城市会自动返回0

原理很简单:SUMIF如果找不到匹配的城市,就会默认返回0,刚好满足你的需求,不用额外处理空值。

R 语言(dplyr)实现

用R的tidyverse套件也能快速搞定:

library(dplyr)

# 模拟原始数据
raw_data <- data.frame(
  城市 = c("北京", "北京", "上海", "广州", "深圳"),
  指标值 = c(100, 200, 150, 300, 250)
)

# 完整城市向量
city_vector <- c("北京", "上海", "广州", "深圳", "成都")

# 分组统计 + 对齐基准维度
full_summary <- tibble(城市 = city_vector) %>%
  left_join(raw_data %>% group_by(城市) %>% summarise(汇总值 = sum(指标值)), by = "城市") %>%
  mutate(汇总值 = replace_na(汇总值, 0))

print(full_summary)

和Pandas逻辑一致:用left_join保留基准城市,再用replace_na把缺失的统计值换成0。

核心思路总结

不管用什么工具,本质都是先固定好完整的城市维度列表,再通过「左连接/匹配」的方式将统计结果与这个基准关联——如果直接从原始数据提取城市,只会保留有数据的条目,漏掉出现次数为0的城市。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:33:08