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

如何在Pandas中用另一列更新列?及统计2010-2016年公立学校新增数

嘿,我来帮你搞定这两个Pandas问题,一步步拆解来~


一、用另一列数据更新目标列的通用方法

在Pandas里用一列更新另一列,常见的有几种实用场景:

  • 直接赋值(简单映射):如果只是把某列的内容直接复制到目标列,直接用赋值语句就行:

    df['目标列'] = df['参考列']
    
  • 条件性更新:更常用的是根据参考列的条件修改目标列,比如当OpenYear等于2010时,把2010列设为1,否则保持0:

    df.loc[df['OpenYear'] == 2010, '2010'] = 1
    
  • 批量更新多列:如果要处理像2010-2016这样的一系列年份列,循环+条件判断是最高效的方式,这刚好能对应你第二个需求~


二、统计2010-2016年新增公立学校数量并更新列

先明确核心逻辑:我们要统计每年新增的学校(即OpenYear为对应年份的学校),同时把原DataFrame的2010-2016列更新为对应的值,我给你写两种常见的更新方式。

第一步:加载示例数据

先把你提供的数据集转换成Pandas DataFrame:

import pandas as pd

# 构造你给出的数据集
data = {
    'StatusType': ['Closed', 'Active', 'Closed', 'Active', 'Active', 'Active', 'Closed', 'Active', 'Active'],
    'County': ['Alameda']*9,
    '2010': [0]*9,
    '2011': [0]*9,
    '2012': [0]*9,
    '2013': [0]*9,
    '2014': [0]*9,
    '2015': [0]*9,
    '2016': [0]*9,
    'OpenYear': [2005, 2006, 2008, 2011, 2011, 2012, 1980, 1980, 1980],
    'ClosedYear': [2015.0, None, 2015.0, None, None, None, 1989.0, None, None]
}

df = pd.DataFrame(data)

第二步:统计每年新增学校数量

筛选出OpenYear在2010-2016之间的学校,按年份分组计数,生成统计DataFrame:

# 筛选并统计每年新增的学校数量
yearly_new = df[df['OpenYear'].between(2010, 2016)]['OpenYear'].value_counts().sort_index()

# 转换成规范的统计DataFrame
annual_stats = yearly_new.to_frame(name='新增公立学校数量')
annual_stats.index.name = '年份'

# 查看统计结果
print(annual_stats)

运行后输出的统计结果是:

新增公立学校数量
年份           
2011          2
2012          1

(如果需要补全2010、2013-2016这些无新增的年份,可以用annual_stats = annual_stats.reindex(range(2010,2017), fill_value=0)来填充0)

第三步:更新原DataFrame的2010-2016列

这里分两种常见需求:

需求1:每一行的年份列显示当年的总新增数

比如所有行的2011列都显示2(当年新增总数),代码如下:

# 遍历2010到2016年,给对应列赋值当年新增数
for year in range(2010, 2017):
    # 若当年有新增则取数量,否则设为0
    count = annual_stats.loc[year, '新增公立学校数量'] if year in annual_stats.index else 0
    df[str(year)] = count

# 查看更新后的DataFrame
print(df)

需求2:标记该行是否为当年新增(1表示是,0表示否)

比如某行的OpenYear是2011,那么它的2011列设为1,其他年份列设为0:

# 遍历年份,标记每行是否为当年新增
for year in range(2010, 2017):
    df[str(year)] = df['OpenYear'].apply(lambda x: 1 if x == year else 0)

# 查看结果
print(df)

内容的提问来源于stack exchange,提问作者Glenn G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:54:32