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

如何以Pandas DataFrame为输入直接创建计算人口变化的df2?

从现有Pandas DataFrame创建人口变化表的方法

给你几个直接从现有df生成目标df2的实用方法:

方法一:用pivot重塑数据后计算

先把原数据转成宽表(城市为行,年份为列),再直接计算两年人口的差值:

# 重塑为宽表,行是城市,列是年份,值对应人口数
pivot_df = df.pivot(index='City', columns='Year', values='Population')
# 计算2022年减1990年的人口变化,整理成目标格式
df2 = pivot_df.assign(**{'Population change': pivot_df[2022] - pivot_df[1990]})[['Population change']].reset_index()

方法二:用groupby+unstack分组计算

按城市分组后展开年份列,再计算差值:

# 按城市和年份分组,将年份对应的人口展开为列
grouped = df.groupby(['City', 'Year'])['Population'].first().unstack()
# 计算人口变化并转为目标DataFrame
df2 = (grouped[2022] - grouped[1990]).reset_index(name='Population change')

方法三:合并两年数据后计算

分别筛选两年的数据再合并,最后计算差值:

# 提取1990和2022年的人口数据并重命名列
df_1990 = df[df['Year'] == 1990].rename(columns={'Population': '1990_pop'})
df_2022 = df[df['Year'] == 2022].rename(columns={'Population': '2022_pop'})
# 按城市合并数据,计算人口变化
merged = pd.merge(df_1990[['City', '1990_pop']], df_2022[['City', '2022_pop']], on='City')
df2 = merged.assign(**{'Population change': merged['2022_pop'] - merged['1990_pop']})[['City', 'Population change']]

这几种方法都能直接基于原df生成目标df2,可以根据自己的习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:32:28