Pandas合并DataFrame时如何按city纵向堆叠而非横向扩展列
实现方法
你需要先筛选出两个DataFrame共有的城市,再对筛选后的结果做纵向拼接即可,完整代码如下:
import pandas as pd # 步骤1:提取两个表共有的city集合 common_cities = df_1['city'].intersection(df_2['city']) # 步骤2:分别筛选两个表中属于共有城市的行 df1_part = df_1[df_1['city'].isin(common_cities)] df2_part = df_2[df_2['city'].isin(common_cities)] # 步骤3:纵向拼接并按城市排序 joined_df = pd.concat([df1_part, df2_part], ignore_index=True).sort_values(by=['city', 'state'], ignore_index=True) # 可选:如果需要把NaN替换为空字符串,执行下面这行 joined_df = joined_df.fillna('')
逻辑说明
你之前用merge得到的是横向拼接的宽表,不符合纵向堆叠的需求。上述方法先过滤出两边都存在的城市(等价于内连接的匹配逻辑),再通过concat纵向堆叠,自动会为缺失的列填充空值,排序后就和你预期的输出完全一致。
内容的提问来源于stack exchange,提问作者Jake Wagner
相关产品推荐
相关产品推荐

