使用另一DataFrame填充Pandas DataFrame空字段并扩展记录
解决方法
可以通过拆分数据后合并,或者利用explode方法实现需求,以下是两种可行方案:
方案一:拆分处理+合并
- 分离出
GROUP不为空的原始记录:
non_null_rows = df[df['GROUP'].notna()]
- 处理
GROUP为空的行,与df_groups做笛卡尔积生成多行记录:
null_rows = df[df['GROUP'].isna()].drop(columns='GROUP').merge(df_groups, how='cross')
- 合并两部分数据并重置索引:
result = pd.concat([non_null_rows, null_rows], ignore_index=True)
执行后得到的结果与预期一致:
AREA GROUP VALUE 0 P1 GROUP1 0 1 P1 GROUP1 2 2 P1 GROUP2 2 3 P1 GROUP3 2
方案二:利用explode展开
- 将
df中GROUP为None的位置替换为df_groups['GROUP']的列表:
df['GROUP'] = df['GROUP'].apply(lambda x: df_groups['GROUP'].tolist() if pd.isna(x) else x)
- 使用
explode将列表类型的GROUP字段展开为多行:
result = df.explode('GROUP', ignore_index=True)
这种方法更简洁,同样能得到预期结果。
内容的提问来源于stack exchange,提问作者Marcus Andre
相关产品推荐
相关产品推荐

