如何在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.
相关产品推荐
相关产品推荐

