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

